Temat: C++: Kontener std::vector
std::vector to dynamiczny kontener sekwencyjny w bibliotece standardowej C++, który umożliwia przechowywanie serii elementów. Jego kluczową cechą jest zdolność do automatycznego zarządzania rozmiarem, dzięki czemu może się dostosowywać w miarę dodawania lub usuwania elementów.
Operacje na std::vector
-
Dodawanie Elementów:
push_back(): Dodaje element na końcu wektora, zwiększając jego rozmiar.emplace_back(): Podobnie jakpush_back(), ale konstruuje element bezpośrednio w wektorze, co może być bardziej wydajne.
-
Usuwanie Elementów:
pop_back(): Usuwa ostatni element z wektora, zmniejszając jego rozmiar.erase(): Usuwa element(y) z określonej pozycji lub zakresu.
-
Dostęp do Elementów:
at(): Zapewnia dostęp do elementu na określonej pozycji, z kontrolą zakresu.operator[]: Umożliwia dostęp do elementu na danej pozycji, bez kontroli zakresu.
-
Zarządzanie Rozmiarem:
size(): Zwraca aktualny rozmiar wektora.capacity(): Zwraca ilość miejsca zaalokowanego dla wektora.resize(): Zmienia rozmiar wektora do określonej liczby elementów.reserve(): Rezerwuje miejsce w pamięci na określoną liczbę elementów, aby uniknąć wielokrotnego realokowania.
Przykłady implementacji
Dodawanie i Usuwanie Elementów:
#include <iostream>
#include <vector>
int main() {
std::vector<int> liczby;
liczby.push_back(10);
liczby.emplace_back(20);
std::cout << "Rozmiar: " << liczby.size() << std::endl;
liczby.pop_back();
std::cout << "Nowy rozmiar: " << liczby.size() << std::endl;
}
Analiza kodu:
#include <iostream>
#include <vector>
Ten fragment kodu dołącza dwa nagłówki: <iostream> dla operacji wejścia/wyjścia (takich jak std::cout) oraz <vector> dla korzystania z kontenera std::vector.
std::vector<int> liczby;
W tym wierszu tworzony jest wektor liczb całkowitych (int) o nazwie liczby. Początkowo jest pusty.
liczby.push_back(10);
liczby.emplace_back(20);
push_back(10): Dodaje wartość10na koniec wektoraliczby.emplace_back(20): Dodaje wartość20na koniec wektoraliczby, ale w miejscu, co może być bardziej wydajne niżpush_back.
std::cout << "Rozmiar: " << liczby.size() << std::endl;
W tym miejscu program wyświetla aktualny rozmiar wektora liczby, który teraz wynosi 2, ponieważ dodano do niego dwa elementy (10 i 20).
liczby.pop_back();
Metoda pop_back() usuwa ostatni element z wektora liczby, w tym przypadku 20, zmniejszając jego rozmiar do 1.
std::cout << "Nowy rozmiar: " << liczby.size() << std::endl;
Teraz program ponownie wyświetla rozmiar wektora liczby, który zmniejszył się do 1 po usunięciu ostatniego elementu.
Dostęp i Zmiana Rozmiaru:
#include <iostream>
#include <vector>
int main() {
std::vector<int> liczby = {1, 2, 3, 4};
std::cout << "Trzeci element: " << liczby.at(2) << std::endl;
liczby.resize(6);
std::cout << "Zmieniony rozmiar: " << liczby.size() << std::endl;
liczby.reserve(10);
std::cout << "Zarezerwowana pojemność: " << liczby.capacity() << std::endl;
}
Analiza kodu:
#include <iostream>
#include <vector>
Ten fragment kodu dołącza dwa nagłówki: <iostream> dla operacji wejścia/wyjścia (takich jak std::cout) oraz <vector> dla korzystania z kontenera std::vector.
std::vector<int> liczby = {1, 2, 3, 4};
Tworzy wektor liczby typu int i inicjalizuje go czterema wartościami: 1, 2, 3, 4.
std::cout << "Trzeci element: " << liczby.at(2) << std::endl;
Wyświetla trzeci element wektora (indeksowanie od 0, więc liczby.at(2) to trzeci element, czyli 3).
liczby.resize(6);
Zmienia rozmiar wektora liczby na 6. Jeśli nowy rozmiar jest większy niż aktualny, dodane zostają domyślne wartości (dla int będzie to 0). Zawartość wektora liczby: {1, 2, 3, 4, 0, 0}
std::cout << "Zmieniony rozmiar: " << liczby.size() << std::endl;
Wyświetla aktualny rozmiar wektora, który teraz wynosi 6.
liczby.reserve(10);
Rezerwuje miejsce na 10 elementów w wektorze liczby. Jest to optymalizacja, aby uniknąć wielokrotnego realokowania pamięci przy dodawaniu nowych elementów.
std::cout << "Zarezerwowana pojemność: " << liczby.capacity() << std::endl;
Wyświetla pojemność wektora liczby, która po wykonaniu reserve(10) wynosi 10.
Wypisanie wszystkich elementów wektora
#include <iostream>
#include <vector>
int main() {
std::vector<int> liczby = { 1, 2, 3, 4 };
liczby.resize(6); // Rozszerza wektor do 6 elementów
// Wypisywanie wszystkich elementów wektora
for (int i = 0; i < liczby.size(); ++i) {
std::cout << liczby[i] << " ";
}
return 0;
}
Analiza kodu:
std::vector<int> liczby = { 1, 2, 3, 4 };
Deklaracja i inicjalizacja wektora liczby typu int z początkowymi wartościami.
liczby.resize(6);
Wywołanie metody resize(6) na wektorze liczby, której zadaniem jest zmiana rozmiaru wektora na 6 elementów. Jeśli nowy rozmiar jest większy niż aktualny, nowe elementy zostaną zainicjalizowane wartością domyślną (w tym przypadku 0 dla typu int).
for (int i = 0; i < liczby.size(); ++i) {
Rozpoczęcie pętli for, która iteruje przez wszystkie elementy wektora liczby. Zmienna i służy jako licznik pętli.
std::cout << liczby[i] << " ";
W tej linii, program wypisuje wartość każdego elementu wektora liczby na standardowe wyjście. Operator << jest używany do przekazywania wartości elementu do strumienia std::cout. Po każdym elemencie dodawana jest spacja.
| Testy przypięte do lekcji | |
|---|---|
| Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się |