我有一个string
数组,只有当特定string
的长度等于已知值时,我才想将其复制到string
s的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::begin
和std::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::string
s(初始化v
;因为你稍后使用back_inserter
,我认为只需vector<string> v;
就足够了。否则,您最终会在v
中获得 8+ 个元素。
其他问题:函数返回类型声明似乎丢失;lambda 参数类型可以更改为const std::string&
。