C++ Copy_if using lambda
C++ Copy_if using lambda
我有一个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&
。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- "using namespace std;"在C++的作用是什么?
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 使lambda不可复制/不可移动
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- AWS Lambda C++运行时权限被拒绝
- C++ Copy_if using lambda
- Using boost::lambda with boost::thread
- boost::io_service post using a lambda