插入元素时std::map
迭代器保持有效,例如:
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
也保证是相同的在调用方法之前?
PPS:例如,推入std::vector
使所有迭代器无效,或仅end
无效(未进行重新分配时),但在这种情况下,docs明确提及{{} 1}}。根据这个推理,&#34;没有迭代器失效&#34;应该包括end
,但我并不是100%确信;)
答案 0 :(得分:4)
N4140 23.2.4关联容器[associative.reqmts] [1]
9 insert和emplace成员不应影响迭代器和容器引用的有效性,擦除成员只能使迭代器和对擦除元素的引用无效。
术语迭代器肯定是指所有迭代器,包括end
。