c++ - 带有 remove_copy_if 的 back_insert_iterator

标签 c++ stl vector iterator

我正在尝试使用 vector 将 back_insert_iteratorremove_copy_if 结合使用,但我遇到了编译错误。

你知道下面的代码为什么不对吗?

#include <iostream>
#include <string>
#include <algorithm>
#include <cassert>
#include <vector>
#include <iterator>
#include <functional>

struct checkRem : std::unary_function<int,bool> {
    int _val;
    checkRem( int val ): _val(val){}
    bool operator()(int aVal){ return aVal > _val;}
};

int main( int argc, char** argv )
{
int _vIn[] = {1,2,3,4,2,3,4,3,6,7};
std::vector< int > vIn( _vIn, _vIn + (sizeof( _vIn )/sizeof(_vIn[0])));

// remove with copy
std::vector<int>vOut;
std::back_insert_iterator< std::vector<int> >  bit( vOut );

std::vector< int >::iterator new_end = 
std::remove_copy_if(
    vIn.begin(),
    vIn.end(),
    bit,
    checkRem(2)
);
}
back_insrt_iter.cpp: In function ‘int main(int, char**)’:
back_insrt_iter.cpp:30: error: conversion from      
‘std::back_insert_iterator<std::vector<int, std::allocator<int> > >’ to non-scalar  
type ‘__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >’ 
requested

最佳答案

std::remove_copy_if() 返回与输出迭代器类型相同的迭代器。在本例中,它是一个 std::back_inserter_iterator。您不是在更改输入容器,而是将谓词不包含的元素复制到输出容器中。

简而言之,如果您想更改输入容器,请使用 std::remove_if()

关于c++ - 带有 remove_copy_if 的 back_insert_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010136/

相关文章:

c++ - 在 Clang 中,编写自定义 ASTMatcher 时可以访问 SourceManager 吗?

c++ - 使用 boost::python 调用一个带有指向数组的指针的 C++ 函数

c++ - map<string1, map<string2, map<string3, string>>> 是否比将字符串连接到 map<string1string2string3, string> 慢?

c++ std::map获取最高键低于X的元素?

java - vector 中的问题

c++ - 从叶类继承

c++ - 如何在 OSX 上构建 FlatBuffers ?

c++ - 创建排序 vector 的索引 vector

c++:const_iterator 和 for-each 循环

C++ vector 和列表插入