什么是这句话的影响:C++中[=](...){...}的含义是什么?
std::replace_if(ln.begin(),ln.end(),[=](int c){return c=='\n'||c==' ';},0);
具体来说,我想知道:
什么的
[=](int c){return c=='\n'||c==' ';}
的意义在哪儿定义这个语法?
什么是这句话的影响:C++中[=](...){...}的含义是什么?
std::replace_if(ln.begin(),ln.end(),[=](int c){return c=='\n'||c==' ';},0);
具体来说,我想知道:
什么的
[=](int c){return c=='\n'||c==' ';}
的意义在哪儿定义这个语法?
这是一个lambda函数。一个没有名字并在代码中内联定义的函数。它已被C++ 11标准添加到C++中。所以,这是相对较新的。
你可以阅读他们here
这是一个拉姆达。它将容器ln
中的整数c
替换为0
,如果c == '\n'
或c == ' '
。由于容器似乎拥有字符,因此基本上可以说它用空字符替换空格和换行符。
[=](INT C){回复C == '\ n' ||ç==”“;}
是创建一个未命名的函数对象lambda表达式。它可以用一个参数调用并返回一个布尔值。方括号是所谓的“lambda介绍人”,其中包含所谓的“捕获条款”。 capture-clause告诉编译器lambda对象如何捕获周围的局部变量。
std :: replace_if(ln.begin(),ln.end(),[=](int c){return c =='\ n'|| c =='';},0 );
replace_if为一个序列,一个函数(更具体地说:一个谓词)和一些其他值需要两个迭代器。它迭代名为ln
的序列的元素,并且如果给定谓词(lambda表达式)为该元素返回true,则用0替换每个元素。
因此,基本上,这行代码将用空终止符替换ln
中的每个空格和换行符。