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:

instagram viewer
  1. Algorytmy
  2. Kontenery
  3. Funkcje
  4. 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:

  1. push_back (wartość): Ta metoda dołącza dane do wektora.
  2. pop_back(): Ta metoda usuwa ostatni element z wektora.
  3. wstawka (indeks, wartość): Ta metoda wstawia nowe elementy przed elementem w określonej pozycji.
  4. rozmiar(): Ta metoda zwraca rozmiar wektora.
  5. pusty(): Ta metoda sprawdza, czy wektor jest pusty, czy nie.
  6. z przodu(): Ta metoda zwraca pierwszą wartość wektora.
  7. z powrotem(): Metoda back zwraca ostatnią wartość wektora.
  8. w (indeks): Ta metoda zwraca wartość w określonej pozycji.
  9. kasować (indeks): Metoda kasowania usuwa elementy z podanego indeksu.
  10. 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:

  1. wciśnij (wartość): Ta metoda dodaje elementy do kolejki.
  2. Muzyka pop(): Ta metoda usuwa pierwszy element kolejki.
  3. rozmiar(): Ta metoda zwraca rozmiar kolejki.
  4. z przodu(): Ta metoda zwraca pierwszy element kolejki.
  5. 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:

  1. wciśnij (wartość): Ta metoda wypycha element na stosie.
  2. Muzyka pop(): Ta metoda usuwa górny element stosu.
  3. Top(): Ta metoda zwraca wartość ostatniego elementu wprowadzonego na stosie.
  4. rozmiar(): Ta metoda zwraca rozmiar stosu.
  5. 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:

  1. wstaw (wartość): Ta metoda wstawia elementy do zestawu.
  2. zaczynać(): Ta metoda zwraca iterator do pierwszego elementu zestawu.
  3. koniec(): Ta metoda zwraca iterator do ostatniego elementu zestawu.
  4. rozmiar(): Ta metoda zwraca rozmiar zestawu.
  5. pusty(): Ta metoda sprawdza, czy zestaw jest pusty, czy nie.
  6. znajdź (wartość): Ta metoda zwraca iterator do elementu przekazanego w parametrze. Jeśli element nie zostanie znaleziony, ta funkcja zwraca iterator na koniec zbioru.
  7. 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.

E-mail
Jak nauczyć się programowania w C++: 6 stron na początek

Chcesz nauczyć się C++? Oto najlepsze strony internetowe i kursy online C++ dla początkujących i doświadczonych programistów.

Czytaj dalej

Powiązane tematy
  • Programowanie
  • Poradniki kodowania
  • Programowanie funkcjonalne
O autorze
Nitin Ranganath (22 opublikowane artykuły)

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.

Więcej od Nitina Ranganatha

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.

.