次のコードを呼び出すときに問題が発生しました。
#include<deque>
using namespace std;
deque<int> deq = {0,1,2,3,4,5,6,7,8};
for(auto it = deq.begin(); it != deq.end(); it++){
if(*it%2 == 0)
deq.erase(it);
}
その結果、セグメンテーション違反が発生しました。問題を調べた後、問題はSTLが両端キューのイテレータを管理する方法にあることがわかりました。消去される要素が両端キューの終わりに近い場合、消去された要素を指すために使用されるイテレータは次を指すようになります。要素ですが、前の要素はそうでvector::iterator
はありません。ループ条件をからに変更すると問題が解決する可能性があることは理解してit != deq.end()
いit < deq.end()
ますが、コードが他のコンテナタイプと互換性を持つように、「標準形式」の両端キュー内の特定の要素をトラバースして消去する方法があるかどうか疑問に思います。同じように。