我有一系列string
个vector
我要复制到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表达式的新功能。
答案 0 :(得分:4)
lines->begin()
和lines->end()
没有按照您的预期行事。 lines
衰减到string*
,然后lines->begin()
将返回数组std::string
的第一个lines
上的迭代器,并且迭代器上的解除引用会得到char
1}}。
您可以改用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(); });
BTW:vector<string> v (8);
使用8个元素(空v
s)初始化std::string
;因为您以后使用back_inserter
我认为只需vector<string> v;
即可。否则,您最终会在v
中获得8个以上的元素。
其他问题:函数返回类型声明似乎丢失了; lambda参数类型可以更改为const std::string&
。