Przejdź do zawartości

C++/Algorytmy w STL/Operacje niemodyfikujące

Z Wikibooks, biblioteki wolnych podręczników.

Poniższe przykłady wymagają dołączenia bibliotek i przestrzeni nazw

#include <iostream>
#include <vector>
#include <string>
using namespace std;


for_each()

[edytuj]
for_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()

[edytuj]
count( 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()

[edytuj]
count_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()

[edytuj]
bool 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.