用算法擦除向量中的特定元素
Erasing particular elements in a vector with algorithm
我想弄清楚remove_if
和vector<T>::erase
是如何工作的。我有下面的代码(试图删除奇数元素):
v2.clear();
v2 = { 10, 20, 21, 30, 31, 33, 44, 66, 67 }; //vector<int>
cout << "v2 is now: " << endl;
printCollection(v2);
cout << "Trying to remove odds from v2: " << endl;
auto what = remove_if(begin(v2), end(v2), [](int elem) {return elem % 2 != 0;});
v2.erase(begin(v2), what);
printCollection(v2);
,下面是输出:
v2 is now:
10 20 21 30 31 33 44 66 67
Trying to remove odds from v2:
33 44 66 67
怎么回事?
代码的行为未指定。std::remove_if
将所有未移除的元素移动到容器的前面,并返回新的逻辑结束迭代器。这个新端(代码中的what
)和.end()
之间的所有元素都有未指定的值。
你应该从what
擦除到.end()
:
v2.erase(what, end(v2));
演示相关文章:
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 求最大元素位置的分治算法
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- C++线性搜索算法,确定数组中元素的数量
- 打印所有儿童树元素的最佳算法?
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 找到对称矩阵的最大元素的最有效算法是什么
- 使用简单的暴力算法找到数组中最大的4个元素
- C++ 查找算法:如何找到元素的最后一次出现?
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++ std::向量插入两个元素替代算法失败
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 使用算法中的插入函数将元素插入空容器中,未给出预期的结果
- 算法在容器中查找具有给定值的元素之一的成员
- 并行算法将向量的元素分配到另一个元素的元素
- 我如何在C 中制作算法,以在不重复的情况下查找集合的变化(即n元素,选择k)
- 删除元素的算法
- 在两个列表中匹配元素算法