przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
for_each
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Algorytm for_each ====== Algorytm for_each umożliwia dostęp, przetworzenie i modyfikację każdego elementu kontenera, w tym również zwykłej tablicy. Zaliczany jest do algorytmów niemodyfikujących, ale może być też zaliczany do algorytmów modyfikujących. Algorytm for_each jest używany zamiast pętli for, aby uzwięźlić i poprawić czytelność kodu przy iteracji przez kontenery. Jego użycie jednoznacznie określa intencje autora i ogranicza rozwlekłość kodu. ===== Nagłówek ===== <code cpp> #include<algorithm> </code> ===== Deklaracja for_each ===== <code cpp> template<class InputIterator, class UnaryProc> UnaryProc for_each(InputIterator begin, InputIterator end, UnaryProc operation) </code> ===== Parametry ===== * begin - pierwszy element kontenera * end - element za ostatnim w kontenerze * operation - operacja wykonywana na elementach kontenera. Może być obiektem funkcyjnym ===== Wartość zwracana ===== Kopia operation. Jeśli operation było obiektem funkcyjnym zmieniającym stan podczas iteracji, for_each zwróci ten obiekt po przetworzeniu. ===== Działanie ===== Wywołuje operation(elem) dla każdego elementu z zakresu [begin, end). operation może być zwykłym wskaźnikiem na funkcję, jak i obiektem funkcyjnym. Algorytm po przetworzeniu zwraca operation. ===== Przykład użycia ===== Definicja obiektu funkcyjnego ze stanem: <code cpp> class Weighted_mean{ double value_; unsigned int n_; public: Weighted_mean(): value_(0.0), n_(0){} void operator()(pair<unsigned int, double> factor){ value_ += factor.first * factor.second; n_ += factor.first; } operator double(){ if(n_ == 0) return 0.0; return value_/n_; } }; </code> Użycie zdefiniowanego wyżej obiektu w algorytmie for_each: <code cpp> typedef std::multimap<unsigned int, double> Oceny; Oceny oceny; oceny.insert(Oceny::value_type(2, 5.0));//Oceny::value_type jest równoważne dla std::pair<unsigned int, double> oceny.insert(Oceny::value_type(5, 3.0)); cout << "Średnia: " << double(for_each(oceny.begin(), oceny.end(), Weighted_mean())) << std::endl; </code>
for_each.txt
· ostatnio zmienione: 2008/12/06 19:15 przez
pzubrycki
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry