Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - C++

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

 

  1. Dodawanie Elementów:

    • push_back(): Dodaje element na końcu wektora, zwiększając jego rozmiar.
    • emplace_back(): Podobnie jak push_back(), ale konstruuje element bezpośrednio w wektorze, co może być bardziej wydajne.
       
  2. Usuwanie Elementów:

    • pop_back(): Usuwa ostatni element z wektora, zmniejszając jego rozmiar.
    • erase(): Usuwa element(y) z określonej pozycji lub zakresu.
       
  3. 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.
       
  4. 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 wektora liczby.
  • emplace_back(20): Dodaje wartość 20 na koniec wektora liczby, 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ę
Aby widzieć ocenę lekcji - Zaloguj się