Jump to content

[C++] Expresiile lambda


Cdorsu
 Share

Recommended Posts

Functii lambda sunt prezente in limbajul C++ din versiunea C++11 ( Modern C++ ).

Ele sunt echivalentul functiilor inline din 'trecut'.

Aceasta este o functie lambda:

[=](int a,int b)mutable throw() -> int
    {
        return a+b;
    }
[ = ] // modul de capturare a variabilelor (aici pe valoare)
[ & ] // aici referinta
[ &a, b] // aici capturez variabila a pe referinta, iar variabila b pe valoare
[ ] //Nu capturez variabile
//Aceste paranteze sunt obligatorii
(int a, int b) //exact ca la functii, acestia sunt parametrii functiei
//Sunt optionali
mutable -  inseamna ca vom modifica valorile
//Este optional
thow() //exceptii
//Esti optional
-> int //returnez un intreg
//Este optional

Un mic exemplu:

#include <iostream>
#include <vector>
#include <stdio.h>
int main()
{
    int i;
    std::vector<int> vct;
    auto predicat = [&]{ return vct.empty(); };
    if(predicat())//Verific daca vectorul este gol
        std::cout<<"Vectorul est gol.\n";
    for(i=0;i<=256;++i)
        vct.push_back(rand()%1024);
    if(!predicat())
        std::cout<<"Vectorul nu mai este gol.\n";
}

#include <iostream>
#include <algorithm>
#include <vector>
#include <stdio.h>
int main()
{
int i;
std::vector<int> vector;
for(i=0;i<100;++i)
vector.push_back(rand()%1024);
std::for_each(vector.begin(),vector.end(),[](int & numar)
{
std::cout<<numar<<' ';
});
}
Edited by Cdorsu
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.