Visual Studio (2015)实现不会使任何迭代器无效(rehash()对内部std::list重新排序,保持所有迭代器有效)。有没有其他的实现可以使迭代器失效(并获得更好的性能,即使具有相同的复杂性)?使std::unordered_map::rehash()上的迭代器失效有时会限制开发人员(例如,我试图仅使用std::unordered_map实现LRU缓存:节点的值具有容器的
C++引用清楚地指出,在迭代器上调用std::vector::erase(it)将使指向擦除元素的所有迭代器无效。我理解为什么这些迭代器在erase调用之后变得不可撤销,但是我很好奇为什么它们需要变得无效,需要什么实现细节?例如,标准规定必须使用连续存储的元素来实现std::vector,而elements can be accessed not only through iterators, but also usingoffset