C++/Algorytmy w STL/Operacje niemodyfikujące
< C++ | Algorytmy w STL
Poniższe przykłady wymagają dołączenia bibliotek i przestrzeni nazw
#include <iostream>
#include <vector>
#include <string>
using namespace std;
for_each()
edytujfor_each( iterator początek, iterator koniec, funkcja )
- Działanie
- wykonuje operację na każdym elemencie ciągu.
- Przykład
- poniższy program wywołuje dla każdego elementu dodanego do vectora funkcję echo.
void echo(short num)
{
cout << num << endl;
}
int main()
{
vector<short> vect;
vect.push_back(5);
vect.push_back(4);
vect.push_back(3);
for_each(vect.begin(), vect.end(), echo);
return 0;
}
Na wyjściu pojawi się:
5 4 3
count()
edytujcount( iterator początek, iterator koniec, wartość )
- Działanie
- liczy ilość wystąpień danej wartości w ciągu.
- Przykład
- program przekształca tablicę liczb w wektor i zlicza ilość znajdujących się w nim dwójek.
int main()
{
int tablica[] = { 2, 5, 7, 9, 2, 9, 2 };
vector<int> v(tablica, tablica+7);
cout << "Ilosc dwojek w tablicy: " << count( v.begin(), v.end(), 2 );
return 0;
}
count_if()
edytujcount_if( iterator początek, iterator koniec, funkcja f )
- Działanie
- liczy w ciągu ilość wystąpień wartości spełniających warunek
- Przykład
- program przekształca tablicę liczb w wektor i zlicza ilość znajdujących się w nim liczb parzystych.
bool czyParzysta(int n){
return (n%2 ? false : true);
}
int main(){
int tablica[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
vector<int> v(tablica, tablica+10);
cout << "Ilosc parzystych: " << count_if(v.begin(), v.end(), czyParzysta);
return 0;
}
equal()
edytujbool equal( iterator początek, iterator koniec, iterator początek_drugiego ) bool equal( iterator początek, iterator koniec, iterator początek_drugiego, funkcja_porownująca )
- Działanie
- porównywany jest pierwszy zakres elementów (początek, koniec) z drugim zakresem (zaczynającym się w początek_drugiego).
- Przykład
- program porównuje łańcuch str z napis oraz z napis2. Porównanie ogranicza się do 2 znaków (długość str).
int main()
{
string str= "bc";
string napis= "abcde";
string napis2= "bcde";
if( equal(str.begin(), str.end(), napis.begin()) )
cout << "Takie same\n";
else
cout << "Rozne\n";
if( equal(str.begin(), str.end(), napis2.begin()) )
cout << "Takie same";
else
cout << "Rozne";
return 0;
}
Wynikiem jest kolejno Rozne oraz Takie same.