c – 删除删除习惯用法:删除return past-the-end-iterator后会发生什么?

c – 删除删除习惯用法:删除return past-the-end-iterator后会发生什么?,第1张

概述当我从Scott Meyers “Effective STL”书中读到擦除 – 删除成语(第32项)时,我得到了这个问题. vector<int> v; ...v.erase(remove(v.begin(), v.end(), 99), v.end()); remove基本上返回“新逻辑结束”和原始范围的元素,从范围的“新逻辑结束”开始并继续,直到范围的实际结束是要从容器中删除的元素. 听起 当我从Scott Meyers “Effective STL”书中读到擦除 – 删除成语(第32项)时,我得到了这个问题.

vector<int> v; ...v.erase(remove(v.begin(),v.end(),99),v.end());

remove基本上返回“新逻辑结束”和原始范围的元素,从范围的“新逻辑结束”开始并继续,直到范围的实际结束是要从容器中删除的元素.

听起来不错.现在,让我问一下我的问题:

在上面的例子中,如果在向量v中找不到99,则remove可以返回v.end().它基本上是将past-the-end-iterator传递给erase方法.

>将last-the-end-iterator传递给erase方法会发生什么?标准是否说它是UB?
>如果它是未定义的行为,那么Scott Meyer的书中的擦除 – 移除成语示例应该看起来像:

vector<int> v;     ...    vector<int>::iterator newEndIter = remove(v.begin(),99);    if(newEndIter != v.end() )    {     v.erase(newEndIter,v.end();    }

有什么想法吗?

解决方法 我认为v.erase(v.end(),v.end())将被很好地定义并且不会被删除. 总结

以上是内存溢出为你收集整理的c – 删除删除习惯用法:删除return past-the-end-iterator后会发生什么?全部内容,希望文章能够帮你解决c – 删除删除习惯用法:删除return past-the-end-iterator后会发生什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1223451.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存