在Visual C++ 2010 Express下編寫代碼時發現問題。當執行最後一行時,我得到一個運行時錯誤「vector iterator not derefereenable」。下面的代碼有什麼問題?在Visual C++ 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
此代碼在gcc下工作。 當元素逐個被刪除時,它也可以在VC++ 2010 Express中運行。
這是VC++ 2010 Express中的錯誤嗎?
VC++ 2013沒有問題 – Matt 2014-09-10 12:57:00
看起來像。可能性是'vec.erase(a,b)'返回'a',因爲沒有調試檢查,即使技術上'a'失效(因爲它現在指的是不同的元素)也是可行的。我會看看源代碼,看看是否發生了什麼(可能通過逐步完成)。 – Yakk 2014-09-10 13:09:40
VC++ 2010 Professional也沒有問題。版本=「Microsoft(R)32位C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86」。編譯並使用「cl test.cpp」從命令行運行。 – 2014-09-10 13:13:54