我有一個簡單的例子程序,用於清除矢量元素,其位置存儲在另一個矢量中。我一直在使用這種方法一段時間,直到最近才遇到一個錯誤:表達式:向量迭代器+偏移超出範圍。有效的或無效的迭代器和迭代器位置
我似乎已經發現問題,即在erase()調用的參數內,我沒有將括號中的第二部分括起來,偶爾會導致上述錯誤消除臨近向量末尾的元素。
現在我已經確定並糾正了這個問題,如果有人能確認我的簡單例程實際上是有效的並且沒有錯誤,並且在此for循環中調用erase()方式沒問題。
我意識到這個例程只有在按照先到後的順序擦除元素位置時纔有效。請參閱我的代碼如下:
vector<int> mynumbers;
mynumbers.push_back(4);
mynumbers.push_back(5);
mynumbers.push_back(6);
mynumbers.push_back(7);
vector<int> delpositions;
delpositions.push_back(1);
delpositions.push_back(2);
delpositions.push_back(3);
for(unsigned int i = 0; i < delpositions.size(); ++i)
mynumbers.erase(mynumbers.begin() + (delpositions[i] - i));
// Used To Be: delpositions[i] - i Which Caused The Error! Instead of: (delpositions[i] - i)
你不給足夠的上下文是明確的這件事,但你的做法(存儲元素的絕對位置在單獨的載體抹去,是要被排序)傾向於指示[代碼氣味](http://en.wikipedia.org/wiki/Code_smell)。 –