相关疑难解决方法(0)

在基于范围的循环c ++ 11中向向量添加元素

我使用了C++ 11标准提供的新的基于范围的for循环,我提出了以下问题:假设我们vector<>使用基于范围的迭代迭代for,并且我们在向量的末尾添加一些元素这个迭代.那么,什么时候循环结束?

例如,请参阅以下代码:

#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector<unsigned> test({1,2,3});
    for(auto &num : test) {
        cout << num << " ";
        if(num % 2)
            test.push_back(num + 10);
    }
    cout << "\n";
    for(auto &num : test) 
        cout << num << " ";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用"-std = c ++ 11"标志测试了G ++ 4.8和Apple LLVM版本4.2(clang ++),输出是(对于两者):

1 2 3
1 2 3 11 13
Run Code Online (Sandbox Code Playgroud)

请注意,第一个循环终止于原始向量的末尾,尽管我们向其添加了其他元素.似乎for-range循环仅在开始时评估容器结束.事实上,这是范围的正确行为吗?是否由委员会指定?我们能相信这种行为吗?

请注意,如果我们改变第一个循环

for(vector<unsigned>::iterator it = test.begin(); it != test.end(); ++it) …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop c++11

12
推荐指数
1
解决办法
5133
查看次数

标签 统计

c++ ×1

c++11 ×1

for-loop ×1