Kontener typu vector

Stronę tą wyświetlono już: 240 razy

Kontenery to szablonowe klasy przystosowane do przechowywania zmiennych danego typu. Istnieją różne typy kontenerów, ja omówię jeden z najczęściej wykorzystywanych i najbardziej uniwersalny z nich czyli kontener typu vector. Kontener tego typu jest listą dwukierunkową umożliwiającą dostęp do wszystkich jej elementów oraz usuwanie i dodawanie elementu na dowolnej pozycji. Przykład kodu przechowującego zmienne typu int:

Listing 1
  1. #include <iostream>
  2. #include <vector> // biblioteka związana z klasą kontenera vector
  3. int main(){
  4. std::vector<int> tInt; // tutaj tworzę kontener typów liczbowych int
  5. for(int i = 0; i < 10; i++){
  6. tInt.push_back(i); // tutaj dodaję elementy na końcu listy
  7. }
  8. std::cout<<"Lista dodanych elementow do kontenera:"<<std::endl<<std::endl;
  9. for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
  10. i++){
  11. std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
  12. <<std::endl;
  13. }
  14. tInt.erase(tInt.begin() + 1); // tutaj usuwam 2-gi element listy tInt.begin() zwraca wskaźnik do pierwszego elementu listy a +1 przesówa wskaźnik o jedną pozycję
  15. std::cout<<std::endl<<"Lista elementow po usunieciu 2-giego elementu:"<<std::endl<<std::endl;
  16. for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
  17. i++){
  18. std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
  19. <<std::endl;
  20. }
  21. tInt.insert(tInt.begin() + 4,10); // dodawanie elementu z wstawieniem go na 5-tej pozycji w kontenerze
  22. std::cout<<std::endl<<"Lista elementow po dodaniu elementu na piatej pozycji w kontenerze:"<<std::endl<<std::endl;
  23. for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
  24. i++){
  25. std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
  26. <<std::endl;
  27. }
  28. tInt.erase(tInt.begin() + 1, tInt.begin() + 4); // usuwanie elementów od 2 do 4 z kontenera
  29. std::cout<<std::endl<<"Lista elementow po usunieciu elementow od 2-giego do 4-tego:"<<std::endl<<std::endl;
  30. for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
  31. i++){
  32. std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
  33. <<std::endl;
  34. }
  35. tInt.clear(); // usuwanie wszystkich elementów kontenera
  36. if(tInt.empty()){
  37. std::cout<<std::endl<<"Tablica zostala oprozniona"<<std::endl<<std::endl;
  38. }
  39. cout<<"Wcisnij enter, aby zamknac program:";
  40. cin.get();
  41. return 0;
  42. }

Oczywiście nic nie stoi na przeszkodzie, aby kontener przechowywał zmienne złożone takie jak struktury czy obiekty klasy danego typu. Istnieje też inny, szybszy sposób iterowania po elementach kontenera za pomocą iteratorów:

Listing 2
  1. for(std::vector<int>::iterator i = tInt.begin();// od i = początkowemu wskaźnikowi tablicy
  2. i < tInt.end(); // mniejszemu od wskaźnika końca tablicy
  3. i++){
  4. std::cout<<"tInt["<<int(i - tInt.begin()) // obliczanie numeru indeksu
  5. <<"]="<<*i // odwołanie do wartości elementu kontenera z poziomu iteratora
  6. <<std::endl; // wyświetlanie elementów tablicy
  7. }

Klasa vector udostępnia szereg innych metod z nią związanych, poniżej zamieszczam niektóre z nich:

assignczyści wektor i kopiuje elementy jego do pustego wektora
atZwraca wskaźnik do elementu na określonej pozycji.
backzwraca wskaźnik do ostatniego elementu kontenera;
beginzwraca wskaźnik do pierwszego elementu kontenera;
capacityzwraca liczbę elementów przechowujących wartość w kontenerze;
clearusuwanie wszystkich elementów tablicy;
emptysprawdza, czy tablica jest pusta;
endzwraca wskaźnik końca tablicy (nie mylić z wskaźnikiem do ostatniego elementu tablicy)
eraseusuwa jeden określony zakres elementów tablicy
frontzwraca adres do pierwszego elementu kontenera vector
insertdodaje element lub listę elementów w określonym miejscu
max_sizezwraca maksymalną długość wektora
pop_backusuwa końcowy element wektora
push_backdodaje element na końcu wektora
sizezwraca liczbę elementów wektora
swapzamienia miejscami elementy wektorów

Komentarze