Strona główna » C++ » Kurs » Korzystanie z klasy vector
 

Korzystanie z klasy vector

Wstęp

Jeśli podczas pisania programu zaistnieje potrzeba utworzenia listy, której długość w trakcie wykonywania programu się zmienia to warto przyjrzeć się klasie vector. Jest to specjalna klasa, która ułatwia tworzenie listy obiektów. Klasa vector należy do standardowej przestrzeni nazw std i można jej używać po dołączeniu biblioteki vector.

Najprostsza implementacja

W celu utworzenia najprostszego wektora, który może przechowywać obiekty typu int można skorzystać z poniższego kodu:

  1. #include <vector>
  2. int main() {
  3.   std::vector< int > lista;
  4.   // kod
  5.   return 0;
  6. }

(1.) Dołączenie biblioteki vector. (4.) Wyszczególnienie, że typ vector należy do przestrzeni std i utworzenie zmiennej o nazwie lista o podanym typie.

Operacje

Dodawanie elementu

Do utworzonego wektora można dodać przy pomocy wywołania funkcji push_back(), które należy wywołać bezpośrednio na samej zmiennej. Jako jedyny argument należy przekazać obiekt o typie, który przechowuje wektor. Poniższy kod dodaje do wcześniej utworzonej zmiennej lista liczby. Funkcja push_back() zawsze dodaje element na końcu wektora.

  1.   std::vector< int > lista;
  2.   lista.push_back(1);
  3.   lista.push_back(2);
  4.   lista.push_back(3);

(1.) Deklaracja zmiennej typu vector przechowującej obiekty typu int, a następnie (2. - 4.) zostaną dodane elementy 1, 2 i 3. Teraz w wektorze kolejno są zapisane elementy {1, 2, 3}.

Ze względu na fakt, że vector ma ułatwiać zadanie zarządzania listą to istnieje możliwość dodawania elementów na określonej pozycji. Służy do tego funkcja insert(), której należy podać dwa argumenty: pozycję w pamięci, gdzie ma być zapisany nowy obiekt oraz wartość, która ma być dodana. Pozycję podaje się względem początku wektora w pamięci, który można uzyskać przy pomocy funkcji begin(). W celu dodanie liczby 4 i 5 po wartości 1 na liście wystarczy dopisać:

  1.   lista.insert(lista.begin() + 1, 4);
  2.   lista.insert(lista.begin() + 2, 5);

(5.) Samo wykorzystanie .begin() wskazuje na pierwszy element na liście tj. element zerowy, dlatego, aby dodać element 4 po 1 należy zwiększyć numer pozycji o 1. (6.) Liczba 5 ma się znajdować po 4 to należy umieścić na pozycji 2, ponieważ na pozycji 1 znajduje się już 4.

Pobieranie elementów

Teraz lista ma postać {1, 4, 5, 2, 3} co można sprawdzić wypisując wszystkie wartości znajdującej się na lista. Można to zrobić przy pomocy poniższego kodu:

  1.   for (int i = 0; i < lista.size(); i++){
  2.     std::cout << lista.at(i) << " ";
  3.   }

(7.) Ilość elementów na liście można pobrać wykorzystując funkcję size(). (8.) W celu pobrania i-tego elementu można wykorzystać funkcję at(), która przyjmuje jeden argument określający, który element chcemy pobrać z listy. Elementy z wektora można pobierać też przy pomocy operatora [ ]. Wtedy linijka (8.) miałaby postać:

  1.     std::cout << lista.at(i) << " ";

Usuwanie elementów

Do usuwania elementów na liście można wykorzystać funkcję erase(). Przyjmuje ona dwa argumenty, który określa zakres pozycji, które mają zostać usunięte z listy. Oczywiście należy pamiętać, aby przekazać bezpośredni zakres w pamięci poprzez użycie funkcji begin(). Poniższy fragment kodu usunie elementy na pozycjach 2 i 3:

  1.   lista.erase(lista.begin() + 1, lista.begin() + 3);

Istnieje również możliwość, aby usunąć wszystkie elementy przechowywane w zmiennej. Najwygodniejszym sposobem jest wykorzystanie funkcji clear():

  1.   lista.clear();

Powyższy fragment można zapisać również przy pomocy funkcji erase() używając początku i końca wektora w pamięci:

  1.   lista.erase(lista.begin(), lista.end());

Ustalenie wartości elementów

Wszystkie elementy, które się znajdują na liście można ustalić przy pomocy operatora =:

  1.   lista.push_back(3);
  2.   lista[0] = 2;
  3.   lista[0] = 1;

(12.) Lista jest pusta, więc należy dodać element o wartości 3. (13.) Następnie program zastępuje element 3 na 2, a potem (14.) 2 na 1.

Podsumowanie

Lekcja 13 dobiegła końca. Zajrzyj do kodu źródłowego, aby przeanalizować wypisywanie danych jeszcze raz. Następnie spróbuj wykonać zadania, aby utrwalić materiał.

Zadania

Zadanie 1

Napisz program, który wypisze na ekran poniższy wygląd konsoli. W programie nie można wypisać tylko fragmentów listy. Należy przy wypisywaniu wypisać wszystkie elementy na liście.

Efekt końcowy powinien wyglądać tak:

  1. 1 2 3 4 5 6 7 8 9 10
  2. 3 5 7 9 11 13 15 17 19 10
  3. 3 5 7 9 10
  4. 3 1 5 2 7 3 9 4 10 5
  5.  
  6. 1 0 1 0 1