2017-04-15 5 views
-2

STLベクタの特定の場所にどのように挿入しますか?イテレータの再割り当て[REWRITTEN]

これまでのところ、私はそうのようなSTLベクターに挿入しようとしている:

someVector.insert(someVector.begin() + location, info); 

私はシーケンス内の項目を挿入していたときにこれは動作しますが、私は、ベクターから項目を削除すると、私はなりたいですその場所に挿入することができます。しかし、反復子は、「ベクトル反復子+オフセットが範囲外です」というエラーをスローするため、再割り当てする必要があります。 (私はC++のイテレータには新しく、「イテレータの再配置」が何であるかは分かりませんが、説明が分かりにくいので、気軽にお気軽に!)多くを見つけることができますイテレータをいつ再割り当てする必要があるかを尋ねるが、そうする最良の方法ではない質問のうち、あるいは、ある位置に挿入するには、別の/より良い方法がありますか?

+0

あなたが別のコンテナを使用する必要があります。そのような潮と戦っているなら、あなたは前提を再検討する必要があります。おそらく、ベクターは正しいコンテナではありません。 –

+2

イテレータを「再割り当てする」という意味ははっきりしません。 – aschepler

答えて

2

ベクトルの消去操作は、消去された要素を1回だけ戻します。あなたは消去「場所で」挿入するための、その後の挿入位置としてそのイテレータを使用することができます。

auto it = v.begin() + 3; // say 

it = v.erase(it);   // erase and store position 
v.insert(it, -3);   // insert at that position 
+0

[デモ](https://ideone.com/fDvE48) –

関連する問題