草庐IT

lambda_sync

全部标签

使用 lambda 的 c++11 排序列表

在练习使用lambda时,我编写了这个程序,它应该根据第二个元素(一个int).#include#include#includeusingnamespacestd;intmain(){list>s={{"two",2},{"one",1},{"three",3}};sort(s.begin(),s.end(),[](paira,pairb)->bool{return(a.second)>(b.second);});for_each(s.begin(),s.end(),[](paira){coutIgetthoseerrors,though:c:\qt\qt5.2.0\tools\min

c++ - 带有模板的 lambda

我目前正在使用模板函数做一些练习。我的任务是编写转换算法的实现。我做了如下操作并且有效:templateoutstransform(inb,ine,outd,Tp(constT&)){while(b!=e)*d++=p(*b++);returnd;}与普通转换一样,我必须使用显式类型调用谓词stransform(begin(vec1),end(vec1),back_inserter(vec2),predi);现在,我偶然发现了C++11Lambda,并想这样调用我的函数:stransform(begin(vec1),end(vec1),back_inserter(vec2),[](do

c++ - lambda 始终返回 '1'

有这样的代码#includeusingnamespacestd;intmain(){coutint{return0;};coutdouble{return3.2;};coutbool{returntrue;};coutbool{returnfalse;};coutconstchar*{return"Helloworld!";};return0;}用gccversion4.8.2编译它,我的输出只有1111111111。为什么只有“1”? 最佳答案 当lambda表达式没有捕获时,它可以隐式转换为函数指针。反过来,函数指针可以隐式转换

C++ 将 lambda 函数保存为没有函数指针的成员变量以进行优化

我想用C++编写一个将lambda函数保存为成员变量的类。尽可能高效地做到这一点会很棒。例如,我阅读了这个线程Whycanlambdasbebetteroptimizedbythecompilerthanplainfunctions?因此我想避免使用函数指针。到目前为止,我最好的解决方案如下:templateclassLambdaClass{private:FlambdaFunc;public:LambdaClass(F&_lambdaFunc):lambdaFunc(_lambdaFunc){}};我会按如下方式使用这个类:autolambdaFunc=[](int_a)->int{

c++ - 引入 lambda 后,类内部函数是否有任何用例?

来自wikipedia关于Lambda函数和表达式的文章:userswilloftenwishtodefinepredicatefunctionsneartheplacewheretheymakethealgorithmfunctioncall.Thelanguagehasonlyonemechanismforthis:theabilitytodefineaclassinsideofafunction....classesdefinedinfunctionsdonotpermitthemtobeusedintemplates这是否意味着在C++0xlambda就位后,在函数内部使用嵌套

c++ - C++ 中的私有(private)方法与 Lambda

我的问题是指:Usingalambdaexpressionversusaprivatemethod现在lambda仿函数是C++的一部分,它们可以用来整理类的接口(interface)。在C++中,lambda使用vs私有(private)方法使用如何比较?有没有更好的替代方案来替代整洁的类接口(interface)? 最佳答案 虽然lambdas绝对可以取代一些私有(private)成员函数,但将它们视为整理类接口(interface)的手段对lambdas和私有(private)成员函数的看法过于狭隘。私有(private)成员

c++ - 如何在 C++11 lambda 中跟踪对象生命周期?

有时,我们对捕获对象状态的lambda的生命周期一无所知(例如,从对象返回它,将其注册为回调而无法取消订阅等)。如何确保lambda不会在调用时访问已销毁的对象?#include#include#includeclassFoo{public:Foo(conststd::string&i_name):name(i_name){}std::functionGetPrinter(){return[this](){std::coutf;{autofoo=std::make_shared("OK");f=foo->GetPrinter();}autofoo=std::make_shared("W

c++ - const lambda 是什么意思?

#includeintfoo(inti){constautoa=[&i](){i=7;returni*i;};a();returni;}intmain(){std::cout这会编译(g++-std=c++11-Wall-Wextra-Wpedanticmain.cpp)并返回49。这让我感到惊讶,因为通过将a声明为常量对象,我会期望i被引用为constint&。显然不是,为什么? 最佳答案 Lambda就像非lambda一样,除了它们的实现细节是隐藏的。因此,使用非lambda仿函数可能更容易解释:#includeintfoo(i

c++ - 如何在 lambda 表达式中捕获单个类数据成员?

我知道以下问题:C++11lambdas:membervariablecapturegotcha。此外,我知道需要通过捕获this指针来捕获类成员,正如这个问题的答案所明确指出的那样。Yes.Capturingmembervariablesisalwaysdoneviacapturingthis;itistheonlywaytoaccessamembervariable.但是,捕获this指针捕获所有类成员。是否可以限制捕获哪些类(class)成员?例如,是否可以捕获单个类成员?我知道以下方法行不通,但有可能实现吗?classFoo{public:Foo():mBar1(1),mBar

c++ - 通过 lambda 表达式初始化变量?

我正在尝试使用lambda表达式初始化一个变量。我还没有听说这是否可能,所以这可能吗?例如:inti([](){return1;});返回errorC2440:'initializing':cannotconvertfrom'wmain::'to'int'这个操作是否可行,只是我的语法错误? 最佳答案 您正在尝试使用lambda对象而不是评估lambda的结果来初始化变量:inti([](){return1;}());//^^ 关于c++-通过lambda表达式初始化变量?,我们在Sta