在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
將被移除的元素復制到一個新的容器中。最后,打印原始容器和被移除的元素。