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ść10
na koniec wektoraliczby
.emplace_back(20)
: Dodaje wartość20
na 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ę |