c – 删除删除习惯用法:删除return past-the-end-iterator后会
发布时间:2020-12-16 10:52:03 所属栏目:百科 来源:网络整理
导读:当我从Scott Meyers “Effective STL”书中读到擦除 – 删除成语(第32项)时,我得到了这个问题. vectorint 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? 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())将被很好地定义并且不会被删除.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |