使用范围for循环向vector输入随机值时出现前置零的问题
问题根源分析与解决办法
为什么会出现前置零?
你遇到的问题核心在于vector的初始化逻辑和错误的填充方式:
首先,你初始化vector的代码是:
vector<int> array3(10);这行代码会直接创建一个包含10个
int类型元素的vector,而int的默认初始化值是0,所以这10个元素一开始就是0。然后看你填充vector的循环:
for(auto a : array3){ array3.push_back(rand() % (101 -50) + 50); }这里有两个关键问题:
- 你用了
auto a(值拷贝)而不是引用,但更重要的是,你没有修改vector里已有的元素,而是用push_back在末尾追加新元素。 - 范围for循环的迭代范围是在循环开始前就确定的——此时array3的size是10,所以循环会执行10次,每次追加一个随机数。最终vector的size就变成了10(初始的0)+10(新追加的随机数)=20,这就是你看到前置10个零的原因。
- 你用了
符合要求的修正方案(必须用范围for循环)
要覆盖初始的0元素,你需要在范围for循环中使用引用来修改vector里的已有元素,而不是追加新元素:
for(auto& a : array3){ a = rand() % (101 -50) + 50; }
这样循环会遍历array3里的10个初始元素,把每个0替换成50-100之间的随机数,最终vector的size保持10,输出就不会有前置零了。
额外说明
如果你一开始就不想有初始元素,也可以先创建空vector,再用循环填充,但这种方式没法直接用范围for循环(因为空vector没有元素可遍历),所以还是上面的方案最符合你的需求。
内容的提问来源于stack exchange,提问作者Paul Park
相关产品推荐
相关产品推荐

