C++ Copy_if using lambda

C++ Copy_if using lambda

本文关键字:using lambda if Copy C++      更新时间:2023-10-16

我有一个string数组,只有当特定string的长度等于已知值时,我才想将其复制到strings的vector中。

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(); });

我得到的错误是:

错误 C2664:"布尔值" 网格::搜索网格::::运算符 (((std::string( const':无法将参数 1 从 'char' 转换为 'std::string'

错误 C2679:二进制"=":找不到右手的运算符 类型为"char"的操作数(或没有可接受的转换(

这些都发生在algorithm header,所以我不确定我哪里出错了。这些新 lambda 表达式的新增内容。

lines->begin()lines->end()的行为不符合您的预期。lines衰减到string*,那么lines->begin()将在数组lines的第1std::string返回迭代器,而对迭代器的取消引用将得到一个char

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

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

顺便说一句:vector<string> v (8);用 8 个元素(空std::strings(初始化v;因为你稍后使用back_inserter,我认为只需vector<string> v;就足够了。否则,您最终会在v中获得 8+ 个元素。

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