リストを経由してすべての偶数を削除するリストイテレータがあります。私はリストのイテレータを使用して数字をうまく印刷できますが、リストのremove()を使用したり、逆参照されたイテレータを渡すことはできません。List Iterator Remove()
私は、remove()ステートメントが有効なときに* itrが壊れていることに気付きましたか?誰かがこれを説明できますか?
#include <iostream>
#include <list>
#define MAX 100
using namespace std;
int main()
{
list<int> listA;
list<int>::iterator itr;
//create list of 0 to 100
for(int i=0; i<=MAX; i++)
listA.push_back(i);
//remove even numbers
for(itr = listA.begin(); itr != listA.end(); ++itr)
{
if (*itr % 2 == 0)
{
cout << *itr << endl;
listA.remove(*itr); //comment this line out and it will print properly
}
}
}
STLイテレータは構造体の長さに依存しないことを指摘しておきます。反復子は、特定の要素を削除することを可能にすることがよくあります。例えば、反復子を越えて項目を削除することができるベクトル反復子、反復子によって指されていないものを削除するリスト反復子 –