顺序容器可以擦除吗?
在标准中它说:
a.erase(q)
Requires: For vector and deque, T shall be
MoveAssignable.
Effects: Erases the element pointed to by q
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚a.erase(a.end())顺序容器是否为no-op或UB.想法?
T.C*_*.C. 10
§23.2.3[sequence.reqmts]/p3(强调我的):
在表100和101中,
X表示一个序列容器类,表示包含类型元素的a值,[...] 表示有效的可解除引用的const迭代器.XTqa
表100是包含的序列容器需求表a.erase(q).
换句话说,a.erase(a.end())是UB.
如果我们将此参考页用于erase():
迭代器pos必须是有效且可解除引用的.因此,end()迭代器(有效但不可解除引用)不能用作pos的值.
所以,不 - 它无效.