擦除`std :: list`的`end()`的行为是什么?

Jan*_*oma 8 c++ iterator stl

我需要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)

cplusplus.com说:

如果position(或range)有效,则函数永远不会抛出异常(无抛出保证).否则,它会导致未定义的行为.

但我不知道的是end()那里是否有效.

Mik*_*our 17

该站点使用模糊(并且可以说是错误的)术语"有效",但库规范(C++ 11 23.2.3)使用更具体的术语"可解除引用" - 意味着迭代器必须引用一个对象.过去的迭代器不是可解除引用的,因此擦除它会产生未定义的行为.

  • +1,我认为网络比*模糊*更糟糕,因为`valid`是标准中使用的术语,`end()`产生*有效*迭代器(即网页是不*模糊*,这是**错**) (3认同)

NPE*_*NPE 6

事实并非如此.试图擦除end()未定义行为的结果.