迭代器擦除(迭代器优先,迭代器最后)不';t在Visual C+下工作+;2010年快车 我在VisualC++ 2010 Express中编写代码时发现了问题。当执行最后一行时,我得到一个运行时错误“向量迭代器不可解引用”。下面的代码有什么问题 vector<int> vec (5, 1001); vector<int>::iterator begin = vec.begin(); vector<int>::iterator end = vec.begin(); begin++; //std::advance(begin, 1); gives the same result end++; end++; end++; //std::advance(end, 3); gives the same result cout << (*begin) << endl; cout << (*end) << endl; begin = vec.erase(begin, end); cout << (*begin) << endl; //It doesn't work vec向量(51001); 向量::迭代器begin=vec.begin(); 向量::迭代器end=vec.begin(); begin++//标准::前进(开始,1);给出了相同的结果 end++;end++;end++//标准:前进(结束,3);给出了相同的结果 cout

迭代器擦除(迭代器优先,迭代器最后)不';t在Visual C+下工作+;2010年快车 我在VisualC++ 2010 Express中编写代码时发现了问题。当执行最后一行时,我得到一个运行时错误“向量迭代器不可解引用”。下面的代码有什么问题 vector<int> vec (5, 1001); vector<int>::iterator begin = vec.begin(); vector<int>::iterator end = vec.begin(); begin++; //std::advance(begin, 1); gives the same result end++; end++; end++; //std::advance(end, 3); gives the same result cout << (*begin) << endl; cout << (*end) << endl; begin = vec.erase(begin, end); cout << (*begin) << endl; //It doesn't work vec向量(51001); 向量::迭代器begin=vec.begin(); 向量::迭代器end=vec.begin(); begin++//标准::前进(开始,1);给出了相同的结果 end++;end++;end++//标准:前进(结束,3);给出了相同的结果 cout,c++,vector,stl,C++,Vector,Stl,如果您不使用SP1,那么 可能会让你大吃一惊,这里还列出了一些解决方法。VC++2013没有问题。概率是vec.erase(a,b)返回a,因为没有调试检查可以工作,即使从技术上讲a无效(因为它现在指的是不同的元素)。我会看一看源代码,看看是否真的发生了这种情况(可能是通过单步执行)。VC++2010 Professional也没有问题。Version=“适用于80x86的Microsoft(R)32位C/C++优化编译器版本16.00.40219.01”。使用“cl test.cpp”从命令行

如果您不使用SP1,那么
可能会让你大吃一惊,这里还列出了一些解决方法。

VC++2013没有问题。概率是
vec.erase(a,b)
返回
a
,因为没有调试检查可以工作,即使从技术上讲
a
无效(因为它现在指的是不同的元素)。我会看一看源代码,看看是否真的发生了这种情况(可能是通过单步执行)。VC++2010 Professional也没有问题。Version=“适用于80x86的Microsoft(R)32位C/C++优化编译器版本16.00.40219.01”。使用“cl test.cpp”从命令行编译并运行。我确认它在以下情况下工作:1。使用不带SP1的版本配置编译。2.它也可以在SP1的调试配置中工作。这本代码完整的书解决了这个问题。“如果你经常发现自己怀疑编译器或硬件出错,你仍然是在迷信。所有错误中只有大约5%是硬件、编译器或操作系统错误。”。这次你很幸运。。。