假设我有以下代码:
typedef std::map< int, std::string >::iterator Iterator;
Iterator iter = myMap.begin();
while (iter != myMap.end())
{
Iterator current = iter;
++iter;
maybeDeleteElement( current ) // may call erase.
}
考虑到
std::map
实现为红黑树,是否可以保证地图中的每个元素都恰好被访问一次?或者修改地图会导致树重新平衡,从而改变迭代顺序?注意:这不是关于迭代器是否会失效的问题。但迭代器仍然有效并不一定意味着将其递增会给出与之前相同的下一个元素。
std::map
的迭代器本质上是一个指向包含某个元素的节点的指针,而不是什么“根节点左边然后右边的节点”。因此,未失效的迭代器在树重新平衡时仍然指向相同的元素。但我找不到标准引用来证明所有这些都是保证的。 - aschepler