C++ jest jednym z najpotężniejszych i najbardziej onieśmielających języków programowania, jakie możesz napotkać jako początkujący. Powód jest dość prosty. Wymaga dużo kodu, aby osiągnąć pożądany wynik. Standardowa biblioteka szablonów, czyli STL, może pomóc w rozwiązaniu tej zagadki.
Biorąc pod uwagę ilość czasu i wysiłku poświęcanego na pisanie kodu dla funkcji takich jak sortowanie i wyszukiwanie, STL może pomóc w wykonaniu wszystkich tych operacji za pomocą jednego wiersza kodu. Ta biblioteka może być niezwykle użyteczna przy rozwiązywaniu problemów i przygotowywaniu wywiadów technicznych.
Co to jest standardowa biblioteka szablonów?
Standardowa biblioteka szablonów (STL) to biblioteka języka C++, która składa się z gotowych funkcji i kontenerów. Zawiera kilka znanych klas szablonów dla typowych struktur danych, takich jak wektory, stosy, kolejki i kilka przydatnych funkcji algorytmicznych, takich jak wyszukiwanie binarne, które ułatwiają programowanie.
Standardowa biblioteka szablonów w C++ składa się z czterech komponentów:
- Algorytmy
- Kontenery
- Funkcje
- Iteratory
Przyjrzyjmy się dokładniej algorytmom i kontenerom, ponieważ są to najczęściej używane komponenty STL.
Algorytmy w STL
plik nagłówkowy jest częścią STL, która składa się z kilku funkcji algorytmicznych, których można użyć zamiast ręcznego ich kodowania. Niektóre z zawartych algorytmów to wyszukiwanie binarne, sortowanie i odwracanie, które są niezwykle przydatne.
Na początek musisz zaimportować nagłówek w pliku C++. Składnia jest następująca:
#zawierać
W przypadku nadchodzących metod rozważ zmienną tablicową o wartościach {6, 2, 9, 1, 4} jako przykład.
int tab[] = {6, 2, 9, 1, 4};
sortować()
sortować() Funkcja pomaga posortować wszystkie elementy wewnątrz określonej struktury danych w kolejności rosnącej. Ta funkcja przyjmuje dwa parametry: iterator początkowy i iterator końcowy.
Związane z: Wprowadzenie do algorytmu sortowania przez scalanie
Składnia:
sortuj (start_iterator, end_iterator);
Oto krótki przykład:
sortuj (arr, arr+5);
dla (int i = 0; <5; i++) {
cout << arr[i] << " ";
}
Wynik:
1 2 4 6 9
odwrócić()
odwrócić() funkcja odwraca kolejność elementów w określonej strukturze danych. Przyjmuje dwa parametry: iterator początkowy i iterator końcowy.
Składnia:
odwrotna (start_iterator, end_iterator);
Oto krótki przykład powyższej metody:
rewers (arr, arr+5);
dla (int i = 0; <5; i++) {
cout << arr[i] << " ";
}
Wynik:
4 1 9 2 6
*min_element() i *max_element()
Funkcje *maks_element() i *min_element() zwracają odpowiednio maksymalną i minimalną wartość wewnątrz określonej struktury danych. Obie te funkcje akceptują dwa argumenty: iterator początkowy i iterator końcowy.
Składnia:
*max_element (start_iterator, end_iterator);
*min_element (start_iterator, end_iterator);
Sprawdźmy, jakie wartości zwracają te funkcje po wywołaniu ich na przykładowej tablicy:
cout << *max_element (arr, arr+5) << endl;
cout << *min_element (arr, arr+5) << endl;
Wynik:
9
1
wyszukiwanie_binarne()
wyszukiwanie_binarne() Metoda służy do sprawdzenia, czy określona wartość jest obecna w strukturze danych, czy nie. Akceptuje trzy argumenty: iterator początkowy, iterator końcowy i wartość, którą chcesz znaleźć.
Wyszukiwanie binarne działa tylko na posortowanych strukturach danych. Dlatego musisz zadzwonić do sortować() metoda najpierw przed wyszukiwanie_binarne() metoda.
Składnia:
wyszukiwanie_binarne (start_iterator, end_iterator, value_to_find)
Oto demonstracja tej metody:
sortuj (arr, arr+5);
wyszukiwanie_binarne (arr, arr+5, 2)? cout << "Znaleziono element": cout << "Nie znaleziono elementu";
wyszukiwanie_binarne (arr, arr+5, 7)? cout << "Znaleziono element": cout << "Nie znaleziono elementu";
Wynik:
Znaleziono element
Nie znaleziono elementu
liczyć()
liczyć() Metoda zwraca liczbę wystąpień określonej wartości w strukturze danych. Wymaga trzech argumentów: iteratora początkowego, iteratora końcowego i wartości do zliczenia.
Składnia:
liczba (start_iterator, end_iterator, value_to_count);
Oto przykład tej metody:
cout << liczba (arr, arr+5, 2) << endl;
Wynik:
1
Kontenery w STL
Kontenery to struktury danych, które przechowują obiekty i dane. Wektory, listy, stosy, kolejki, zestawy i mapy to tylko niektóre z przykładów, które przechowują w nich dane zgodnie z określonym pierwotnym typem danych. Możesz użyć tych kontenerów, importując ich odpowiednie nagłówki do pliku C++.
Podczas inicjalizacji zmiennej kontenera należy wspomnieć o danych pierwotnych, takich jak int, zwęglać, strunowy w środku <> wsporniki.
Przyjrzyjmy się bliżej niektórym z tych kontenerów:
Wektor
Wektory to dynamiczne tablice, z którymi można zmieniać rozmiar i z którymi można pracować. Kiedy wstawiasz lub usuwasz element z wektora, automatycznie dopasowuje się rozmiar wektora. To jest podobne do Struktura danych ArrayList w Javie.
Składnia:
#zawierać
wektor nazwa_zmiennej;
Oto kilka ważnych metod wektorowych:
- push_back (wartość): Ta metoda dołącza dane do wektora.
- pop_back(): Ta metoda usuwa ostatni element z wektora.
- wstawka (indeks, wartość): Ta metoda wstawia nowe elementy przed elementem w określonej pozycji.
- rozmiar(): Ta metoda zwraca rozmiar wektora.
- pusty(): Ta metoda sprawdza, czy wektor jest pusty, czy nie.
- z przodu(): Ta metoda zwraca pierwszą wartość wektora.
- z powrotem(): Metoda back zwraca ostatnią wartość wektora.
- w (indeks): Ta metoda zwraca wartość w określonej pozycji.
- kasować (indeks): Metoda kasowania usuwa elementy z podanego indeksu.
- jasny(): Ta metoda usuwa wszystkie elementy w wektorze.
wektor < int > v = { 23, 12, 56, 10 };
v.push_back (5);
v.push_back (25);
v.pop_back();
auto i = v.insert (v.begin() + 1, 7);
cout << "Rozmiar podanego wektora " << v.size() << endl;
jeśli (v.empty()) {
cout << "Wektor jest pusty" << endl;
} jeszcze {
cout << "Wektor nie jest pusty" << endl;
}
cout << "Element na pierwszej pozycji to " << v.front() << endl;
cout << "Element na ostatniej pozycji to " << v.back() << endl;
cout << "Element na danej pozycji to " << v.at (4) << endl;
v.rease (v.begin() + 1);
dla (int i = 0; i < v.rozmiar(); i++) {
cout << v[i] << " ";
}
Wynik:
Wielkość danego wektora 6
Wektor nie jest pusty
Element na pierwszej pozycji to 23
Element na ostatniej pozycji to 5
Element na danej pozycji to 10
23 12 56 10 5
Kolejka
W strukturze danych kolejki elementy są wstawiane od tyłu i usuwane z przodu. W związku z tym jest zgodny z podejściem FIFO („pierwszy weszło, pierwszy wyszedł”).
Składnia:
#zawierać
kolejka nazwa_zmiennej;
Oto kilka ważnych metod kolejki:
- wciśnij (wartość): Ta metoda dodaje elementy do kolejki.
- Muzyka pop(): Ta metoda usuwa pierwszy element kolejki.
- rozmiar(): Ta metoda zwraca rozmiar kolejki.
- z przodu(): Ta metoda zwraca pierwszy element kolejki.
- z powrotem(): Ta metoda zwraca ostatni element kolejki.
kolejka < int > q;
qpush (30);
qpush (40);
qpush (50);
qpush (60);
qpush (70);
cout << "Pierwszym elementem jest " << q.front() << endl;
cout << "Ostatnim elementem jest " << q.back() << endl;
cout << "Wielkość kolejki to " << q.size() << endl;
q.pop();
cout << "Drukowanie wszystkich elementów Kolejki" << endl;
podczas gdy (!q.pusty()) {
cout << q.front() << " ";
q.pop();
}
Wynik:
Pierwszy element to 30
Ostatni element to 70
Wielkość kolejki to 5
Drukowanie wszystkich elementów Kolejki
40 50 60 70
Stos
Pojemniki piętrowe działają na zasadzie LIFO. LIFO oznacza „ostatnie weszło, pierwsze wyszło”. Dane są wypychane i wyskakiwane z tego samego końca.
Składnia:
#zawierać
stos nazwa_zmiennej;
Oto kilka ważnych metod stosu:
- wciśnij (wartość): Ta metoda wypycha element na stosie.
- Muzyka pop(): Ta metoda usuwa górny element stosu.
- Top(): Ta metoda zwraca wartość ostatniego elementu wprowadzonego na stosie.
- rozmiar(): Ta metoda zwraca rozmiar stosu.
- pusty(): Ta metoda sprawdza, czy stos jest pusty, czy nie.
stos < int > s;
wypychanie (30);
s.push (40);
s.push (50);
wypychanie (60);
cout << "Na szczycie stosu znajduje się " << s.top() << endl;
s.pop();
cout << "Szczyt stosu po wykonaniu operacji pop: " << s.top() << endl;
cout << "Wydrukowanie wszystkich elementów stosu" << endl;
podczas gdy (!s.pusty()) {
cout << s.top() << " ";
s.pop();
}
Wynik:
Wierzchołek stosu zawiera 60
Wierzchołek stosu po wykonaniu operacji pop: 50
Drukowanie wszystkich elementów stosu
50 40 30
Zestaw
Kontenery zestawów są używane do przechowywania unikalnych wartości, a wartości elementu nie można zmienić po wstawieniu go do zestawu. Wszystkie elementy w zestawie są przechowywane w uporządkowany sposób. Zestaw kontenera jest podobny do ustawić strukturę danych w Pythonie.
Składnia:
#zawierać
zestaw nazwa_zmiennej;
Oto kilka ważnych metod zestawu:
- wstaw (wartość): Ta metoda wstawia elementy do zestawu.
- zaczynać(): Ta metoda zwraca iterator do pierwszego elementu zestawu.
- koniec(): Ta metoda zwraca iterator do ostatniego elementu zestawu.
- rozmiar(): Ta metoda zwraca rozmiar zestawu.
- pusty(): Ta metoda sprawdza, czy zestaw jest pusty, czy nie.
- znajdź (wartość): Ta metoda zwraca iterator do elementu przekazanego w parametrze. Jeśli element nie zostanie znaleziony, ta funkcja zwraca iterator na koniec zbioru.
- kasować (wartość): Ta metoda usunęła określony element z zestawu.
ustaw < int > s;
s.wstawka (20);
wstawka (30);
s.wstawka (40);
s.wstawka (50);
wstawka (60);
wstawka (60);
wstawka (60);
auto i = s.początek();
cout << "Element na pierwszej pozycji" << * i << endl;
cout << "Rozmiar zbioru" << s.size() << endl;
s.find (20) != s.end()? cout << "Znaleziono element" << endl: cout << "Nie znaleziono elementu" << endl;
s. wymazać (30);
cout << "Drukowanie wszystkich elementów" << endl;
for (auto i = s.początek(); i != s.end(); i++) {
cout << * i << " ";
}
Wynik:
Element na pierwszej pozycji 20
Wielkość kompletu 5
Znaleziono element
Drukowanie wszystkich elementów
20 40 50 60
C++ nie musi być trudne
Podobnie jak w przypadku każdej innej umiejętności, praktyka jest niezbędna, aby jak najlepiej wykorzystać STL. Te kontenery i algorytmy mogą pomóc Ci zaoszczędzić dużo czasu i są łatwe w użyciu. Zacznij od przećwiczenia przykładów pokazanych powyżej, a w końcu zaczniesz używać go również we własnych projektach.
Jeśli jednak uczysz się C++ po raz pierwszy, zacznij od nauki podstaw, zanim zaczniesz rozumieć STL.
Chcesz nauczyć się C++? Oto najlepsze strony internetowe i kursy online C++ dla początkujących i doświadczonych programistów.
Czytaj dalej
- Programowanie
- Poradniki kodowania
- Programowanie funkcjonalne
Nitin jest zapalonym programistą i studentem inżynierii komputerowej tworzącym aplikacje internetowe przy użyciu technologii JavaScript. Pracuje jako niezależny programista stron internetowych, aw wolnym czasie lubi pisać dla Linuksa i programowania.
Zapisz się do naszego newslettera
Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Jeszcze jeden krok…!
Potwierdź swój adres e-mail w e-mailu, który właśnie do Ciebie wysłaliśmy.