为什么允许擦除 vector.end()? [英] Why erasing vector.end() is allowed?

查看:37
本文介绍了为什么允许擦除 vector.end()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

今天我正在做一些代码,看起来像这样:

Today I was doing a bit of code, which looked something like this:

vec.erase(std::remove_if(vec.begin(), vec.end(), <lambda here>));

当上面的代码不应该擦除任何东西时,这意味着 std::remove_if 应该返回 vec.end(),当我收到大小减一的向量时,我感到非常惊讶:最后一个元素被擦除了.问题已通过将以上更改为:

When above code was not supposed to erase anything, meaning that std::remove_if should return vec.end(), I was very surprised when i received my vector with size decreased by one: last element was erased. Problem was fixed by changing above to:

vec.erase(std::remove_if(vec.begin(), vec.end(), <lambda here>), vec.end());

但问题仍然存在:怎么做

But still question remains: how can

vec.erase(vec.end());

有工作吗?不应该是未定义的行为吗?

do any work? Shouldn't it be undefined behaviour?

显然,我对未定义行为的理解从一开始就是错误的,我一直观察到的是 UB.谢谢大家回答我的问题.

Apparently my understanding of underfined behaviour was wrong from the beginning and what i observed was UB all along. Thank you everyone for answering my question.

推荐答案

未定义的行为.特别是,这意味着您可能会看到大小减少了一个

It is undefined behaviour. In particular, it means that you may see size decreased by one

更多关于 UB

这篇关于为什么允许擦除 vector.end()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆