Witam.
Chcąc nauczyć się używania pętli for_each natknąłem się na ciekawy kod który niezbyt rozumiem z powodu braku doświadczenia i małej wiedzy na temat C++. :/
Mianowicie chodzi o ten kod:
#include <vector>
#include <algorithm>
#include <iostream>
struct Sum
{
Sum(): sum{0} { }
void operator()(int n) { sum += n; }
int sum;
};
int main()
{
std::vector<int> nums{3, 4, 2, 8, 15, 267};
std::cout << "before:";
for (auto const &n : nums)
{
std::cout << ' ' << n;
}
std::cout << '\n';
std::for_each(nums.begin(), nums.end(), [](int &n){ n++; });
// calls Sum::operator() for each number
Sum s = std::for_each(nums.begin(), nums.end(), Sum());
std::cout << "after: ";
for (auto const &n : nums)
{
std::cout << ' ' << n;
}
std::cout << '\n';
std::cout << "sum: " << s.sum << '\n';
}
Szczególnie mam problem ze zrozumieniem struktury Sum a dokładniej jej metod, szczególnie z deklaracją jej konstruktora. O co chodzi tym " : " ? :D
Tak samo średnio rozumiem tą linię:
std::for_each(nums.begin(), nums.end(), [](int &n){ n++; });
Wiem że trzecim argumentem for_each() powinna być funkcja wykonywana z argumentem każdego elementu tablicy no ale tutaj jest coś na rodzaj funkcji zwracającej tablicę? Nie wiem.
Jeżeli znajdzie się ktoś kto rozumie o co w tym chodzi to prosiłbym o jakieś fajne wytłumaczenie. Lubię wiedzieć jak wszystko działa "od podszewki" no ale nie mogę wymagać tak dogłębnych lekcji programowania na forum. :D
Chętnie przygarnę jakieś linki do kursów/poradnik gdzie mogę się dowiedzieć co oznaczają tego typu deklaracje a w szczególności ta:
Sum(): sum{0} { }
void operator()(int n) { sum += n; }
Z góry dziękuję za pomoc. :)
Jeszcze podaję link do źródła kodu:
http://en.cppreference.com/w/cpp/algorithm/for_each