使用lambda的C ++ Copy_if

时间:2018-05-02 03:03:14

标签: c++ string algorithm lambda copy

我有一系列stringvector我要复制到string string 仅当特定function(int len){ string lines[8]{ "a string", "another string", "and another" etc.. } vector<string> v (8); std::copy_if(lines->begin(), lines->end(), std::back_inserter(v), [len](std::string i) { return len == i.length(); }); 时s长度等于到已知值。

algorithm header

我得到的错误是:

  

错误C2664:'布尔   网:: SearchGrid ::::运营商   ()(std :: string)const':无法将参数1从'char'转换为   '的std :: string'

     

错误C2679:二进制'=':找不到右侧的操作符   'char'类型的操作数(或没有可接受的转换)

这些都发生在{{1}}内,所以我不确定我哪里出错了。这些新lambda表达式的新功能。

1 个答案:

答案 0 :(得分:4)

lines->begin()lines->end()没有按照您的预期行事。 lines衰减到string*,然后lines->begin()将返回数组std::string的第一个lines上的迭代器,并且迭代器上的解除引用会得到char 1}}。

您可以改用std::beginstd::end

std::copy_if(std::begin(lines), std::end(lines), std::back_inserter(v), 
    [len](std::string i) { return len == i.length(); });

BTW:vector<string> v (8);使用8个元素(空v s)初始化std::string;因为您以后使用back_inserter我认为只需vector<string> v;即可。否则,您最终会在v中获得8个以上的元素。

其他问题:函数返回类型声明似乎丢失了; lambda参数类型可以更改为const std::string&