• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Do czego potrzebna jest lambda? C++

0 głosów
876 wizyt
pytanie zadane 13 lutego 2017 w C i C++ przez Gracjan Pasik Obywatel (1,810 p.)
Witam, tak jak w temacie. Mógłby ktoś wytłumaczyć tak abym mógł łatwo zrozumieć lambdę w C++?
komentarz 13 lutego 2017 przez niezalogowany

Tutaj ładnie to wytłumaczono.

2 odpowiedzi

+3 głosów
odpowiedź 14 lutego 2017 przez koczurekk Gaduła (3,420 p.)

Można nimi zastąpić np. wolny std::bind chcąc zbindować argumenty, albo lepiej – coś na co nie kojarzę pojedynczego słowa ale jest bardzo przydatne i w kodzie poniżej:

/*Wolny, ale szybki do napisania algorytm na n–tą liczbę
z ciągu fibbonacciego, nie chciało mi się pisać porządnej,
nierekurencyjnej wersji. */
size_t calculate_fib(size_t n) {
	if(n < 2) {
		return 1;
	}

	return calculate_fib(n - 1) + calculate_fib(n - 2);
}

int main() {
	std::vector<size_t> fib;
	fib.resize(10);

	size_t n;
	std::cin >> n;

	/* Bardzo elastyczny i wydajny sposób wypełnienia tej tablicy */
	std::generate(fib.begin(), fib.end(), [&n] { return calculate_fib(++n); });

	for(auto i: fib) {
		std::cout << i << std::endl;
	}

	return 0;
}

Dodatkowo lambdy jako obiekty pewnych struktur (nie zastanawiaj się jakich, stracisz czas) mają dużo ciekawych właściwości, po ich typach można dziedziczyć, używać jako wizytorów (bez boost-a), generyczne lambdy są w dodatku często świetnym odpowiednikiem szablonu funkcji (którego nie można od tak przekazać jako parametru do np. std::accumulate).

0 głosów
odpowiedź 13 lutego 2017 przez Dexterim Dyskutant (8,370 p.)

Lambda sa to funkcje anonimowe nie posiadajace nazwy ulatwija zycie gdy musimy skorzystac z funkcji w jakies innej funkcji w gruncie rzeczy zastepuje ona wskazniki na funkcje. Bardzo przydaja sie np. w algorytmach z biblioteki standardowej.

Troche wiecej informacji o lambdach:

Polska wersja

Angielska

komentarz 13 lutego 2017 przez Gracjan Pasik Obywatel (1,810 p.)
Ale po co robić funkcję która wykona się tylko raz? Nie można tego bez funkcji żadnej zrobić?

Zamiast int i = []()->int { return 123; }(); napisac int i = 123;?
komentarz 13 lutego 2017 przez Dexterim Dyskutant (8,370 p.)

Twój przykład jest oczywiście prostym przedstawieniem lambdy jasne prosciej jest napisac i = 123.

Ale można napisać tak

auto i = [](){ return 123;} ;

co w szybki sposob tworzy funkcje z i.

Tak juz wyzej napisałem z lamb korzysta się w funkcjach które przyjmują inne funkcje jako parametr i tam są bardzo wygodne

komentarz 14 lutego 2017 przez koczurekk Gaduła (3,420 p.)
Możesz pominąć okrągłe nawiasy jeżeli lambda nie przyjmuje żadnych parametrów.

Podobne pytania

+3 głosów
1 odpowiedź 1,834 wizyt
0 głosów
1 odpowiedź 456 wizyt
0 głosów
0 odpowiedzi 197 wizyt

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...