首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vec.erase(vec.end());合法?

vec.erase(vec.end());合法?
EN

Stack Overflow用户
提问于 2015-02-11 14:35:57
回答 3查看 127关注 0票数 2

顺序容器能擦除结束吗?

在标准中,它说:

代码语言:javascript
复制
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。想法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-11 14:43:56

§23.2.3序列.23.2.3/p3(重点是地雷):

在表100和表101中,q表示序列容器类,a表示包含T类型元素的Xa值,.,表示对 a.有效的可取消引用的const迭代器

表100是包含a.erase(q)的序列容器需求表。

换句话说,a.erase(a.end())是UB。

票数 10
EN

Stack Overflow用户

发布于 2015-02-11 14:39:00

如果我们使用this reference page for erase()

迭代器pos必须是有效的和可撤销的。因此,end()迭代器(它是有效的,但不是可取消的)不能用作pos的值。

所以,不-这是无效的。

票数 5
EN

Stack Overflow用户

发布于 2015-02-11 14:38:24

来自cplusplus.com:“无效的位置或范围会导致未定义的行为。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28456934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档