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

Dziwna deklaracja metod w strukturze oraz pętla foreach.

Object Storage Arubacloud
0 głosów
256 wizyt
pytanie zadane 15 lutego 2016 w C i C++ przez Exus Początkujący (420 p.)

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

 

 

3 odpowiedzi

+1 głos
odpowiedź 15 lutego 2016 przez draghan VIP (106,230 p.)
wybrane 15 lutego 2016 przez Exus
 
Najlepsza
Zarzucę Ci hasłami i krótkim wyjaśnieniem z intencją poszukania przez Ciebie właściwych dla siebie materiałów na ten temat. ;)

Ten dwukropek w konstruktorze oznacza listę inicjalizacyjną - w sumie to podstawy wiedzy, dotyczącej konstruktorów. Dzięki niej możesz zainicjalizować, np. stałe obiektu czy obiekt bazowy, ale też wszystkie inne składowe obiektu, jeszcze zanim punkt wykonania wejdzie w ciało konstruktora.

A wyrażenie z [](){} to tzw. wyrażenie lambda - konstrukcja dodana w C++11 - tak w skrócie - funkcja definiowana w miejscu użycia.

EDIT: no, z poszukiwaniem materiałów wyręczył Cię Patrycjerz... :/
+1 głos
odpowiedź 15 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)
+1 głos
odpowiedź 15 lutego 2016 przez Exus Początkujący (420 p.)
Dzięki za szybką odpowiedź. :) Temat uważam za wyczerpany a teraz czas poszukać jakichś dodatkowych przykładów. :D @draghan dzięki twojemu krótkiemu opisów coś się przypomina z tym dwukropkiem no ale tak to jest jak się przeczyta a potem nie używa. :D

Podobne pytania

+1 głos
1 odpowiedź 525 wizyt
pytanie zadane 1 grudnia 2021 w PHP przez BarSki13 Obywatel (1,250 p.)
0 głosów
2 odpowiedzi 188 wizyt
pytanie zadane 23 marca 2018 w PHP przez gambi Początkujący (350 p.)
0 głosów
0 odpowiedzi 273 wizyt
pytanie zadane 4 lutego 2018 w PHP przez mi-20 Stary wyjadacz (13,190 p.)

92,555 zapytań

141,402 odpowiedzi

319,539 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...