我试图理解C++ 11 for(type&x:)(&stl的for_each)如何在内部工作,并希望有人可以启发我.所以下面的代码:
vector<int> v;
int z=0;
for (int i = 0; i < 5; ++i)
v.push_back(z++);
for (int& i : v)
{
printf(" %i", i);
v.insert(v.begin(), z++);
}
Run Code Online (Sandbox Code Playgroud)
打印0 0 1 2 3.我会理解0 0 0 0 0或0 1 2 3 4,但那个输出,我不太明白怎么样?什么(x:y)编译成?? 不要认为这会很重要,但我使用的是clang 3.4.
谢谢!
C++ 11标准实际上给出了等效的传统循环代码,这对于Standardese来说是一种非常罕见的方法.您将在6.5.4节中找到它:


在扩展中,很明显,end()循环开始之前的值将被保存并在以后检查.不幸的是,第一次insert()调用使迭代器无效.迭代器失效的规则:
如果没有重新分配,插入点之前的所有迭代器和引用仍然有效.
显然end()不是"插入点之前".
由于行为insert(p, rv)是"插入rv之前的副本p.",插入点明显位于迭代器之前p(v.begin()在此处).所以循环迭代器__begin也不是第一遍的"插入点之前".
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |