Menu
Coddy logo textTech

Modyfikowanie algorytmów

Lekcja 21 z 23 w kursie C++ – Standardowa biblioteka szablonów w Coddy.

W tej lekcji dowiesz się o modyfikowaniu algorytmów dostępnych w C++ STL.
Algorytmy modyfikujące służą do zmiany wartości elementów w kontenerze.


Omówimy następujące algorytmy:

  • copy()
  • fill()
  • move()
  • swap()
  • reverse()

Metoda copy()

Metoda copy() kopiuje elementy z zakresu wyznaczonego przez dwa iteratory do zakresu zaczynającego się od trzeciego iteratora

vector<int> v1 = {1, 2, 3};
vector<int> v2;

copy(v1.begin(), v1.end(), v2.begin());

for(auto value : v1)
	cout << value << " ";
Output:
1 2 3

Użyliśmy metody copy(), aby skopiować zawartość wektora v1 do wektora v2.


Metoda fill()

Ta metoda przypisuje każdemu elementowi w podanym zakresie, wyznaczonym przez dwa iteratory, podaną wartość.

vector<int> numbers(10); // tworzy pusty wektor z 10 elementami

fill(numbers.begin(), numbers.end(), 1);

for(auto value : numbers)
	cout << value << " ";

cout << endl;

fill(numbers.begin(), numbers.end() - 3, 2);

for(auto value : numbers)
	cout << value << " ";
Output:
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 1 1 1

Metoda move()

Ta metoda przenosi elementy z bieżącego kontenera i zwraca ich wartość typu rvalue.

vector<string> names;

string first = "John";
string second = "Max";

names.push_back(first);
names.push_back(move(second));

cout << first << endl;
cout << second << endl;
cout << names[1];
Output:
John

Max

Jak widać, metoda move() opróżnia ciąg znaków, ale zwraca jego wartość, a metoda push_back() wstawia tę wartość do wektora.


Metoda swap()

Ta metoda zamienia elementy miejscami w dwóch kontenerach tego samego typu.

vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};

for(auto value : v1)
	cout << value << " ";
for(auto value : v2)
	cout << value << " ";

cout << endl;

swap(v1, v2);

for(auto value : v1)
	cout << value << " ";
for(auto value : v2)
	cout << value << " ";
Output:
1 2 3 4 5 6
4 5 6 1 2 3

Metoda reverse()

Ta metoda odwraca kolejność elementów jednego kontenera, a dokładniej — elementów w zakresie wyznaczonym przez dwa iteratory.

vector<int> a = {1, 2, 3, 4, 5};

for(auto value : a)
	cout << value << " ";
	
cout << endl;
	
reverse(a.begin(), a.end());

for(auto value : a)
	cout << value << " ";
Output:
1 2 3 4 5
5 4 3 2 1

 

Spróbuj swoich sił

Ta lekcja nie zawiera wyzwania z kodem.

Wszystkie lekcje w sekcji C++ – Standardowa biblioteka szablonów

Poćwicz samodzielnie: Kompilator C++ online