此代码是否适用于所有符合标准的C++编译器(它适用于g ++)?为什么(如果可能,请给出C++ 11参考)?一般来说,std :: unordered_map和关联容器怎么样?关联容器中的end()迭代器
std::map<std::string, std::string> map;
std::map<std::string, std::string>::iterator i(map.end());
map.insert({"bla", ""});
map.insert({"hah", ""});
assert(map.end() == i);
如果标准说“不会影响迭代器的有效性,我会假设包含'end()'返回的迭代器,这是不是真的? – 2012-03-27 09:39:02
是的,'end'返回的是一个迭代器,所以如果你的动作不会使迭代器失效,它将保持有效。 – 2012-03-27 09:42:16
许多很好的答案,但我检查了这一个,因为它最接近我遇到的问题。我使用end()迭代器作为'这是一个无效的迭代器'指示器(种类'NULL'迭代器),这可能导致可避免的错误,因为存储的end()迭代器不能保证等于如果使用无序的关联容器,则它最初来自容器的end()迭代器。 – user1095108 2012-03-27 11:35:45