11

要素が順不同で削除される可能性のある C++ のモノのリストを実装する予定です。ランダム アクセスが必要になるとは思いません (定期的にリストをスイープする必要があるだけです)。アイテムの順序も重要ではありません。

だから私std::list<Thing*> with this->position = insert(lst.end(), thing)はそのトリックをやるべきだと思った。lst.erase(this->position)Thing クラスに各インスタンスの位置を記憶させて、後で一定の時間内に簡単に実行できるようにしたいと思います。

ただし、私はまだ C++ STL コンテナーに少し慣れていないため、イテレーターを長期間保持しても安全かどうかはわかりません。特に、挿入された Thing の前後に他の要素が削除されることを考えると、Thing がなくなる前に。

4

2 に答える 2

13

リストでは、すべての反復子は挿入中に有効なままであり、削除された要素への反復子のみが削除中に無効になります。

あなたの場合、挿入された Thing* の前後に他の要素が削除された場合でも、イテレータを保持することは問題ありません。

編集

vector と deque の追加の詳細:

ベクトル:

  • 挿入 --- 再割り当てが発生した場合、すべてのイテレータが無効になり、それ以外の場合は有効になります。
  • 消去 ---- 消去ポイント以降のイテレータはすべて無効になります。

デキュー:

  • inserting --- すべてのイテレータが無効になります。
  • 消去 ---- すべてのイテレータが無効になります。
于 2009-04-17T06:52:50.220 に答える
4

これは、使用するコンテナによって異なります。

以下を確認してください: http://www.sgi.com/tech/stl/
各コンテナのドキュメントの最後を見てください。イテレータが有効である条件についての説明があります。

std::list<> の場合、それらが実際に参照する要素がコンテナーから削除されるまで、すべての条件下で有効のままです (この時点では無効です)。

于 2009-04-17T08:53:53.673 に答える