在for循环中增加向量的大小

3
如果我在for循环中将std::vector的大小增加,而它是for循环的参数之一,那么会起作用吗?for循环是否会在每次迭代时重新计算向量的大小? 示例:
for(int i=0; i<myVector.size(); i++)
{
   myVector.push_back(new element);
}

谢谢


1
你应该意识到修改向量会使迭代器失效。如果你在循环中遍历向量,这可能会导致麻烦,例如 for(auto x: some_vector) { some_vector.push_back(new_element);} - Jens
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

是的,myVector.size()会在每次迭代中重新计算,每次都返回一个更大的值。因此,你的循环永远不会结束,就像狗追自己的尾巴一样(假设初始大小不为零)。

如果你想将向量中的元素数量加倍,你需要提前存储myVector.size(),并在循环中使用存储的值,像这样:

size_t origSize = myVector.size();
for(int i=0; i<origSize; i++)
{
   myVector.push_back(new element);
}

是的,使用上面的代码示例会导致无限循环。那只是一个概念的概括。在我的实际代码中,我有一定数量的新元素被添加,但我需要根据向量的更新大小进行循环。感谢您的回答。 - Noobgineer

0
在 for 循环中的条件会在每次迭代时重新计算。因此,示例代码将永远不会终止,因为大小将不断重新计算,而 i 永远无法赶上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,