gpt4 book ai didi

C++ Copy_if 使用 lambda

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:15 24 4
gpt4 key购买 nike

我有一个 string 数组,我想将其复制到 stringvector only if 一个特定的 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(); });

我得到的错误是:

error C2664: 'bool Grid::SearchGrid::::operator ()(std::string) const': cannot convert argument 1 from 'char' to 'std::string'

error C2679: binary '=': no operator found which takes a right-hand operand of type 'char' (or there is no acceptable conversion)

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

最佳答案

lines->begin()lines->end()不要像你预期的那样行为。 lines衰减到 string* , 然后 lines->begin()将在 1 日返回迭代器 std::string数组 lines , 并在迭代器上取消引用将得到 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);初始化 v有 8 个元素(空 std::string s);因为你正在使用 back_inserter后来我想只是vector<string> v;足够。否则你会在 v 中得到 8+ 个元素最后。

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

关于C++ Copy_if 使用 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com