2017-04-15 48 views
-2

如何插入STL向量中的特定位置?重新分配迭代器[REWRITTEN]

到目前爲止,我已經嘗試插入一個STL載體,像這樣:

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

這工作時,我插入序列物品,但是當我從載體中刪除一個項目,我想成爲能夠在該位置插入。但是,迭代器需要重新分配,因爲它會拋出「向量迭代器+偏移超出範圍」錯誤。 (我對C++迭代器相當陌生,所以我不完全確定「迭代器重新分配」是什麼,並且似乎無法找到一個好的解釋,所以如果你能解釋,請隨時!)我可以找到很多這些問題詢問迭代器何時需要重新分配,但不是最好的方式。或者,是否有不同的/更好的方式插入某個位置?

+0

您需要使用不同的容器。如果你像這樣的潮流戰鬥,你需要重新審視你的假設。也許矢量不是合適的容器。 –

+2

「重新分配」迭代器的含義並不清楚。 – aschepler

回答

2

向量上的擦除操作將迭代器返回到剛擦除的元素之後。您可以使用該迭代器作爲後續插入位置,以在要刪除的位置插入「at the place」:

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

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

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