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 3Uż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 1Metoda 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
MaxJak 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 3Metoda 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