【发布时间】:2020-07-17 07:47:09
【问题描述】:
如果我在标准 for 循环的第一次迭代期间删除了向量的所有 5 个元素
std::vector<int> test {1, 2, 3, 4, 5};
for(int i = 0; i < test.size(); i++)
{
if(test[i] == 1) test.erase(test.begin(), test.end());
std::cout << i << " ";
}
它只会迭代一次,std::cout 输出将为 '0'。
但是,如果我使用基于范围的循环执行相同的操作,它将迭代 5 次,尽管向量的所有元素都被删除。
int i = 0;
for (auto &a: test)
{
if (a==1) test.erase(test.begin(), test.end());
std::cout << i << " ";
i++;
}
std::cout 输出将是 '0 1 2 3 4'。
当使用这两种类型的循环时,这种不同的行为从何而来?
【问题讨论】:
标签: c++ c++11 vector stdvector