阅读量:0
在std::remove
函数中,并不会真正移除元素,而是将要移除的元素移到容器的末尾,并返回一个指向新的逻辑结尾的迭代器。如果要处理被移除的元素,可以使用std::remove_if
结合std::copy_if
或者自定义的处理逻辑来实现。
以下是一种处理被移除的元素的方法:
#include <iostream> #include <algorithm> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; int valueToRemove = 3; auto it = std::remove(vec.begin(), vec.end(), valueToRemove); // 使用std::copy_if将被移除的元素复制到一个新的容器 std::vector<int> removedElements; std::copy_if(vec.begin(), it, std::back_inserter(removedElements), [=](int val) { return val == valueToRemove; }); // 打印原始容器 for (int i : vec) { std::cout << i << " "; } std::cout << std::endl; // 打印被移除的元素 for (int i : removedElements) { std::cout << i << " "; } std::cout << std::endl; return 0; }
在上面的代码中,我们先使用std::remove
将要移除的元素移到容器的末尾,然后使用std::copy_if
将被移除的元素复制到一个新的容器中。最后,打印原始容器和被移除的元素。