Przejdź do głównej zawartości
Uwaga!

Ten artykuł nie jest skończony. Możesz pomóc w jego ukończeniu edytując tą stronę.

Używanie algorytmów

W bibliotece standardowej języka C++ znajdziemy dużo gotowych algorytmów, których możemy użyć do manipulowania wektorami.

Wersja C++

Zalecamy korzystanie z wersji C++20, ponieważ rozwiązania z niej są prostsze. Dla osób, które z jakiegoś powodu nie mogą zainstalować kompilatora, który wspiera najnowszy standard, zamieścimy też przykłady działające na starszej wersji.

Aby móc skorzystać z algorytmów, musimy dodać następujący nagłówek do kodu:

#include <algorithm>

Motywacja

Pokażemy Ci, jak:

  1. wyszukać najmniejszą wartość (std::ranges::min())
  2. wyszukać największą wartość (std::ranges::max())
  3. policzyć ile razy występuje dany element (std::ranges::count())
  4. odwrócić kolejność (std::ranges::reverse())
  5. posortować elementy wektora (std::ranges::sort())

Algorytmy

Na początek stwórzmy sobie prosty program, na którym bedziemy testować działanie algorytmów. Przygotujmy tablicę liczb:

Tablica liczb
std::vector<int> numbers = { 22, 13, 27, 4 };

W każdym wypadku, użycie algorytmu sprowadzi się do wpisania:

std::ranges::<nazwa_algorytmu>(<wektor>);

// np.:
std::ranges::sort(numbers);

przy czym za <wektor> wstawimy przygotowany wyżej numbers. Będziemy po każdej operacji wyświetlać zawartość wektora numbers za pomocą poznanej wcześniej pętli for:

Wyświetlanie elementów tablicy
for (int n : numbers)
std::cout << n << ' ';

Prezentacja działania

Na początek zobaczmy przykładowy kod, z wykorzystaniem wszystkich tych algorytmów, a później je omówimy.

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
std::vector<int> numbers = { 22, 13, 27, 4 };

int min = std::ranges::min(numbers);
int max = std::ranges::max(numbers);

std::cout << "Najmniejsza: " << min << '\n';
std::cout << "Największa: " << max << '\n';

// Na potrzebę prezentacji funkcji "count"
// dodaję jedną liczbę 13 na koniec:
numbers.push_back(13);

size_t count = std::ranges::count(numbers, 13);
std::cout << "Wystąpień 13: " << count << '\n';

std::cout << "Przed odwróceniem:\n";
for (int n : numbers)
std::cout << n << ' ';

std::ranges::reverse(numbers);

std::cout << "\nPo odwróceniu:\n";
for (int n : numbers)
std::cout << n << ' ';

std::cout << "\nPrzed posortowaniem:\n";
for (int n : numbers)
std::cout << n << ' ';

std::ranges::sort(numbers);

std::cout << "\nPo posortowaniu:\n";
for (int n : numbers)
std::cout << n << ' ';
}
Wynik
Najmniejsza: 4
Największa: 27
Wystąpień 13: 2
Przed odwróceniem:
22 13 27 4 13
Po odwróceniu:
13 4 27 13 22
Przed posortowaniem:
13 4 27 13 22
Po posortowaniu:
4 13 13 22 27

Omówienie

Najmniejsza wartość

Działanie algorytmu 'min'

Aby znaleźć najmniejszą wartość wewnątrz wektora, używamy std::ranges::min:

std::cout << std::ranges::min(numbers);

Największa wartość

Działanie algorytmu 'max'

Aby znaleźć największą wartość wewnątrz wektora, używamy std::ranges::max tak:

std::cout << std::ranges::max(numbers);

Zliczanie wystąpień

Uwaga

Na potrzeby tego algorytmu, dodamy sobie jeszcze jedną wartość 13 na koniec tablicy.

Działanie algorytmu 'count'

count służy do zliczania wystąpień elementów, w tym wypadku, wewnątrz wektora. Korzystamy z tego w ten sposób:

std::cout << std::ranges::count(numbers, 13);

Możemy również zapisać ten wynik do zmiennej. Powinniśmy do tego użyć specjalnego typu size_t, który w uproszczeniu jest nieujemną liczbą (ponieważ liczba wystąpień nie może być ujemna):

std::size_t count = std::ranges::count(numbers, 13);
std::cout << "Liczba wystąpień 13: " << count;

Odwracanie kolejności

Działanie algorytmu 'reverse'

Aby odwrócić kolejność elementów wektora, używamy std::ranges::reverse  (lub std::reverse przed C++20).

std::ranges::reverse(numbers);

Sortowanie

Działanie algorytmu 'sort'

Używamy funkcji sortującej w ten sposób:

std::ranges::sort(numbers);
Uwaga!

Ten artykuł nie jest skończony. Możesz pomóc w jego ukończeniu edytując tą stronę.

Używanie algorytmów

W bibliotece standardowej języka C++ znajdziemy dużo gotowych algorytmów, których możemy użyć do manipulowania wektorami.

Wersja C++

Zalecamy korzystanie z wersji C++20, ponieważ rozwiązania z niej są prostsze. Dla osób, które z jakiegoś powodu nie mogą zainstalować kompilatora, który wspiera najnowszy standard, zamieścimy też przykłady działające na starszej wersji.

Aby móc skorzystać z algorytmów, musimy dodać następujący nagłówek do kodu:

#include <algorithm>

Motywacja

Pokażemy Ci, jak:

  1. wyszukać najmniejszą wartość (std::ranges::min())
  2. wyszukać największą wartość (std::ranges::max())
  3. policzyć ile razy występuje dany element (std::ranges::count())
  4. odwrócić kolejność (std::ranges::reverse())
  5. posortować elementy wektora (std::ranges::sort())

Algorytmy

Na początek stwórzmy sobie prosty program, na którym bedziemy testować działanie algorytmów. Przygotujmy tablicę liczb:

Tablica liczb
std::vector<int> numbers = { 22, 13, 27, 4 };

W każdym wypadku, użycie algorytmu sprowadzi się do wpisania:

std::ranges::<nazwa_algorytmu>(<wektor>);

// np.:
std::ranges::sort(numbers);

przy czym za <wektor> wstawimy przygotowany wyżej numbers. Będziemy po każdej operacji wyświetlać zawartość wektora numbers za pomocą poznanej wcześniej pętli for:

Wyświetlanie elementów tablicy
for (int n : numbers)
std::cout << n << ' ';

Prezentacja działania

Na początek zobaczmy przykładowy kod, z wykorzystaniem wszystkich tych algorytmów, a później je omówimy.

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
std::vector<int> numbers = { 22, 13, 27, 4 };

int min = std::ranges::min(numbers);
int max = std::ranges::max(numbers);

std::cout << "Najmniejsza: " << min << '\n';
std::cout << "Największa: " << max << '\n';

// Na potrzebę prezentacji funkcji "count"
// dodaję jedną liczbę 13 na koniec:
numbers.push_back(13);

size_t count = std::ranges::count(numbers, 13);
std::cout << "Wystąpień 13: " << count << '\n';

std::cout << "Przed odwróceniem:\n";
for (int n : numbers)
std::cout << n << ' ';

std::ranges::reverse(numbers);

std::cout << "\nPo odwróceniu:\n";
for (int n : numbers)
std::cout << n << ' ';

std::cout << "\nPrzed posortowaniem:\n";
for (int n : numbers)
std::cout << n << ' ';

std::ranges::sort(numbers);

std::cout << "\nPo posortowaniu:\n";
for (int n : numbers)
std::cout << n << ' ';
}
Wynik
Najmniejsza: 4
Największa: 27
Wystąpień 13: 2
Przed odwróceniem:
22 13 27 4 13
Po odwróceniu:
13 4 27 13 22
Przed posortowaniem:
13 4 27 13 22
Po posortowaniu:
4 13 13 22 27

Omówienie

Najmniejsza wartość

Działanie algorytmu 'min'

Aby znaleźć najmniejszą wartość wewnątrz wektora, używamy std::ranges::min:

std::cout << std::ranges::min(numbers);

Największa wartość

Działanie algorytmu 'max'

Aby znaleźć największą wartość wewnątrz wektora, używamy std::ranges::max tak:

std::cout << std::ranges::max(numbers);

Zliczanie wystąpień

Uwaga

Na potrzeby tego algorytmu, dodamy sobie jeszcze jedną wartość 13 na koniec tablicy.

Działanie algorytmu 'count'

count służy do zliczania wystąpień elementów, w tym wypadku, wewnątrz wektora. Korzystamy z tego w ten sposób:

std::cout << std::ranges::count(numbers, 13);

Możemy również zapisać ten wynik do zmiennej. Powinniśmy do tego użyć specjalnego typu size_t, który w uproszczeniu jest nieujemną liczbą (ponieważ liczba wystąpień nie może być ujemna):

std::size_t count = std::ranges::count(numbers, 13);
std::cout << "Liczba wystąpień 13: " << count;

Odwracanie kolejności

Działanie algorytmu 'reverse'

Aby odwrócić kolejność elementów wektora, używamy std::ranges::reverse  (lub std::reverse przed C++20).

std::ranges::reverse(numbers);

Sortowanie

Działanie algorytmu 'sort'

Używamy funkcji sortującej w ten sposób:

std::ranges::sort(numbers);