顺序容器能擦除结束吗?
在标准中,它说:
a.erase(q)
Requires: For vector and deque, T shall be
MoveAssignable.
Effects: Erases the element pointed to by q还不清楚对于顺序容器,a.erase(a.end())是非op还是UB。想法?
发布于 2015-02-11 14:43:56
§23.2.3序列.23.2.3/p3(重点是地雷):
在表100和表101中,
q表示序列容器类,a表示包含T类型元素的X的a值,.,表示对a.有效的可取消引用的const迭代器
表100是包含a.erase(q)的序列容器需求表。
换句话说,a.erase(a.end())是UB。
发布于 2015-02-11 14:39:00
如果我们使用this reference page for erase():
迭代器pos必须是有效的和可撤销的。因此,end()迭代器(它是有效的,但不是可取消的)不能用作pos的值。
所以,不-这是无效的。
发布于 2015-02-11 14:38:24
来自cplusplus.com:“无效的位置或范围会导致未定义的行为。”
https://stackoverflow.com/questions/28456934
复制相似问题