我需要std::list在找到它之后从中删除一个元素std::find.std::list::erase使用end()列表调用的行为是什么?我的情况是这样的:
std::list<T> mylist;
T value;
std::list::iterator it = std::find(mylist.begin(), mylist.end(), value);
std::list::iterator next = mylist.erase(it);
Run Code Online (Sandbox Code Playgroud)
如果position(或range)有效,则函数永远不会抛出异常(无抛出保证).否则,它会导致未定义的行为.
但我不知道的是end()那里是否有效.
Mik*_*our 17
该站点使用模糊(并且可以说是错误的)术语"有效",但库规范(C++ 11 23.2.3)使用更具体的术语"可解除引用" - 意味着迭代器必须引用一个对象.过去的迭代器不是可解除引用的,因此擦除它会产生未定义的行为.