簡體   English   中英

當沒有迭代器失效時,這是否包括結束迭代器?

[英]When no iterators are invalidated, does this include the end iterator?

std::map s迭代器在插入元素時保持有效,例如:

std::map<std::string,int> my_map;
my_map["foo"] = 1;
my_map["bar"] = 2;

auto it_foo = my_map.find("foo");
auto it_bar = my_map.find("bar"); 

my_map["foobar"] = 3;

插入另一個元素(在最后一行)后,兩個迭代器仍然有效。 end怎么樣? 例如:

auto it_end = my_map.find("something that isnt in the map");

my_map["barfoo"] = 4; // does not invalidate iterators

assert(it_end == my_map.end()); // ??

換句話說:如果一個方法沒有使迭代器無效(除了那些明確提到的那些,例如在map::erase情況下)這是否意味着在調用方法之前保證end也是相同的?

PS:我知道我可以嘗試看看,但這不會告訴我是否可以依賴這種行為。

PPS:例如,推入std::vector會使所有迭代器無效,或者只是end (當沒有重新分配時),但在這種情況下, 文檔明確提到end 根據這個推理,“沒有迭代器無效”應該包括end ,但我不是100%確信;)

N4140 23.2.4關聯容器[associative.reqmts] [ 1 ]

9插入和插入成員不應影響迭代器的有效性和對容器的引用,擦除成員應僅使迭代器和對已擦除元素的引用無效。

絕對地,術語迭代器指的是包括end在內的所有迭代器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM