2011-06-19 39 views

回答

7

是,設置的erase僅無效迭代器指向所刪除的元素(注意,這並不一定適用於所有容器)。

+0

謝謝你這麼快就回復〜什麼,如果擦除後KEY1,我插入另一個key3進入測試?我仍然可以使用iter2來引用key2嗎? – cheng

+0

@ user508305:是的,插入不壞迭代器爲好。 –

3

嚴格來說,您必須檢查「插入」操作的返回值,並確保key1key2不會比較相等;否則iter1 == iter2和擦除iter1無效iter2。但總體來看,前面的答案是,刪除一個迭代器只會使該迭代器失效,而不會使其他迭代器失效。

實施例:

struct Foo 
{ 
    Foo(std::string s = "") : s(s) { } 
    bool operator<(const Foo & other) { return s.size() < other.size(); } 
} 

std::set<Foo> x; 
x.insert(Foo("Cat")); 
x.insert(Foo("Dog")); // booboo 
3

Asociative容器設置,需要多集,地圖和多重映射到僅無效迭代器和引用到擦除元件。

在雙端隊列所有的迭代器和引用被無效,除非擦除構件是在其端部(正面或背面)的一個列表中的雙端隊列(23.2.1.3/4) 的只有迭代器和引用到擦除元素無效(23.2.2.3/3),並在每次迭代器和參考擦除點失效後的矢量(23.2.4.3/3)

+0

你有關聯容器規則,一個標準的參考嗎? –

+0

是的,那將是'23.1.2/8' [lib.associative.reqmts]'插入元件不得影響迭代器和引用到容器的有效性,並擦除 成員應僅無效迭代器和引用到擦除的元素 – lccarrasco