当底层元素被移动后,迭代器仍然有效吗?

for*_*ack 0 c++ move-semantics c++11

如果我有一个迭代器指向 STL 容器中的一个元素,并且我用迭代器移动了该元素,那么标准是否保证迭代器仍然有效?我可以将它与容器的方法一起使用吗container::erase

容器是连续容器(例如 )vector还是非连续容器(例如 )也很重要吗list

std::list<std::string> l{"a", "b", "c"};
auto iter = l.begin();
auto s = std::move(*iter);
l.erase(iter);       // <----- is it valid to erase it, whose underlying element has been removed?
Run Code Online (Sandbox Code Playgroud)

Ala*_*les 5

是的,您已经修改了容器中的对象。您尚未修改容器本身,因此迭代器仍然有效