这可能是 STL 中命名最差的函数吗?(反问)
std::remove_copy_if() 实际上似乎没有做任何删除。据我所知,它的行为更像 copy_if_not。
否定有点令人困惑,但可以用 std::not1() 解决,但是我可能会误解一些东西,因为我无法理解这个函数与删除有什么关系——我错过了什么吗?
如果没有,是否有 STL 算法有条件地从容器中删除(移动?)元素并将它们放入另一个容器中?
编辑以添加示例,以便读者减少困惑。
以下程序似乎使输入范围(V1)保持不变:
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
using std::cout;
using std::endl;
int main (void)
{
std::vector<int> V1, V2;
V1.push_back(-2);
V1.push_back(0);
V1.push_back(-1);
V1.push_back(0);
V1.push_back(1);
V1.push_back(2);
std::copy(V1.begin(), V1.end(), std::ostream_iterator<int>(cout, " "));
cout << endl;
std::remove_copy_if(
V1.begin(),
V1.end(),
std::back_inserter(V2),
std::bind2nd(std::less<int>(), 0));
std::copy(V2.begin(), V2.end(), std::ostream_iterator<int>(cout, " "));
cout << endl;
std::copy(V1.begin(), V1.end(), std::ostream_iterator<int>(cout, " "));
cout << endl;
}
它输出:
-2 0 -1 0 1 2
0 0 1 2
-2 0 -1 0 1 2
我期待看到这样的东西:
-2 0 -1 0 1 2
0 0 1 2
0 0 1 2 ? ? ?
在哪里 ?可以是任何值。但令我惊讶的是,输入范围未被触及,并且返回值不能与(在这种情况下)std::vector::erase() 一起使用。(返回值是一个输出迭代器。)