【发布时间】:2014-03-19 13:16:32
【问题描述】:
我有两个代码示例,它们的作用完全相同。一个是在 C++03 和 C++11 中。
C++ 11
int main()
{
vector<int> v = {1,2,3};
int count = 0;
for each (auto it in v)
{
cout << it<<endl;
if (count == 0)
{
count++;
v.push_back(4);//adding value to vector
}
}
return 0;
}
C++ 03
int main()
{
vector<int> v = {1,2,3};
int count = 0;
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it<<endl;
if (count == 0)
{
count++;
v.push_back(4);//adding value to vector
}
}
return 0;
}
这两个代码都给出了以下异常。
现在当我看到 vector::end() 实现时,
iterator end() _NOEXCEPT
{
// return iterator for end of mutable sequence
return (iterator(this->_Mylast, this));
}
这里,内联函数显然需要_Mylast 来计算结束。因此,当我添加时,它的指针将递增到下一个位置,例如_Mylast++。为什么我会收到此异常?
谢谢。
【问题讨论】:
-
"for each, in" 不是标准的。 c++11的范围是for(类型名:集合)。
标签: c++ c++11 vector iterator c++-standard-library