skip to Main Content

Transformacje kontenera (C++)

Ostatnio opisywałem jak kontener można wyświetlić, dziś powiem jak można kontener podać transformacji. Przykładowo każdy element w wewnątrz wektora pomnożyć przez 5 i wynik zwrócić do tego samego wektora.
Załóżmy że mamy wektor z takimi liczbami

I chcemy te każdą z tych liczb pomnożyć przez 5 w celu osiągnięcia takiego wyniku:
Najnajbardziej oczywistą rzeczą jest wykorzystanie funkcji transform znajdującej się w bibliotece <algorithm>. Trzeci parametr w funkcji transform służy do określenia miejsca do którego będą umieszczane wartości zwracane przez funkcję (tutaj to jest wyrażanie lambda)
Jak widać wykorzystałem wyrażenie lambda (tylko VS 2010 i późniejsze). Po chwili zastonowienia, doszedłem do wniosku że można liczbę do wyrażenia lambda przekazać jako referencję, dzięki temu można wykorzystać funkcję for_each

Paweł Sołtysiak

Programista, domowy kucharz i "amator amerykańskiej polityki".
Zbieram informacje z całej sieci, po odrzuceniu chwastów i dodaniu swojej opinii publikuje na blogu.

  • blemasta

    Widze ze nową wersje C++ ostro jedziesz.
    a tak po staremu to mozna
    vectora;
    for(int i=1;i<=9;i++) a.push_back(i);
    transform(a.begin(),a.end(),a.begin(),bind2nd(multiplies(),5));

    lub za pomocą for_each ale wtedy trzeba wlasny funktor zrobić ktory argument operatora () przyjmuje jako referencje a nie kopie wartosci
    np
    template
    class Ble : public binary_function{
    private:
    T b;
    public:
    Ble(T a) : b(a){};
    T operator()(T& a){
    a=a*b;
    }
    };
    for_each(a.begin(),a.end(),Ble(5));
    bo standardowo jest chyba semantyka wartosci a nie referencji w stlu
    pozdro

  • blemaaster

    kurde ucina w komentarzach taki htmlowe zeby jakis haker…
    ;/

Back To Top