Autor: Wojciech Grześkowiak
Vector to rodzaj kontenera który trzyma swoje elementy w określonym porządku. Vector zaimplementowano w sposób przypominający dynamicznie zmieniająca się tablice, przez co do jego elementów można odnosić się zarówno poprzez iterator jaki i bezpośrednio podając numer pozycji jaka nas interesuje. Jest on jednak o wiele lepszy od zwykłej tablicy, gdyż może zwiększać swoją pojemność kiedy będzie jej potrzebował.
Kontener vector należny używać kiedy:
Implementacja vectora w bibliotece standardowej C++ to szablon z dwoma parametrami.
template < class T, class Allocator = allocator<T> > class vector;
gdzie T to typ elementu jaki będziemy przechowywać, a Allocator definiuje sposob przydzielania pamięci dla nowych elementów. Domyślnie jest on już przydzielony, więc nie musimy się o niego martwić.
Przykładowy program ilustrujący zastosowania kontenera można zobaczyćtutaj (vector.cpp)
Vector udostępnia szereg metod którymi możemy manipulować jego zawartością.
Konstruktory | Tworzą vector i inicjalizują przekazanymi danymi. |
Operatory | Opeatory manipulacji vectorem. |
assign | Dodaje elementy do vectora. |
at | Zwraca element z podanego miejsca. |
back | Zwraca referencje do ostatniego elementu. |
begin | Zwraca iterator wskazujący na pierwszy elementu. |
capacity | Zwraca liczbę elementów jakie może trzymać vector. |
clear | Usuwa wszystkie elementy z vectora. |
empty | Zwraca true jeśli vector jest pusty. |
end | Zwraca iterator wskazujący za ostatni element. |
erase | Usuwa dane elementy z vectora. |
front | Zwraca referencje na pierwszy element. |
insert | Dodaje elementy do vectora. |
max_size | Zwraca maksymalną liczbę elementów jakie może trzymać vector. |
pop_back | Usuwa ostatni element z vectora. |
push_back | Dodaje element na koniec vectora. |
rbegin | Zwraca odwrotny iterator wskazujący na koniec vectora. |
rend | Zwraca odwrotny iterator wskazujący na początek vectora. |
reserve | Ustawia minimalny rozmiar vectora. |
resize | Zmienia rozmiar vectora. |
size | Zwraca liczbę elementów jakie trzyma vector. |
swap | Wymienia elementy jednego vectora z drugim. |
Vector posiada następujące konstruktory.
vector();
Domyślny, tworzący nową pustą instancję kontenera.
vector( const vector& c );
Kopiujący, który tworzy nowy wektor ze skopiowanymi elementami od przekazanego.
vector( size_type num, const TYPE& val = TYPE() );
Tworzy vector z podaną ilością elementów (num), o wartości przekazanej w drugim parametrze val, jeśli wartość nie podana, ustalana jest domyślna dla tego typu.
vector( input_iterator start, input_iterator end );
Tworzy vector z elementami z zakresu jaki ustalają przekazane iteratory.
Vector posiada następujące operatory.
TYPE& operator[]( size_type index ); const TYPE& operator[]( size_type index ) const;
Operator ten zwraca element znajdujący się pod wskazaną pozycją.
vector operator=(const vector& c2);
Operator przypisania.
bool operator==(const vector& c1, const vector& c2); bool operator!=(const vector& c1, const vector& c2); bool operator<(const vector& c1, const vector& c2); bool operator>(const vector& c1, const vector& c2); bool operator<=(const vector& c1, const vector& c2); bool operator>=(const vector& c1, const vector& c2);
Standardowe operatory porównania. Dwa vectory są równe kiedy:
i
jednego vectora jest równy elementowi na pozycji i
drugiego vectora.void assign( size_type num, const TYPE& val ); void assign( input_iterator start, input_iterator end );
Metoda assign()
dodaje do vectora:
num
elementów o wartości val
,start
oraz end
.TYPE& at( size_type loc ); const TYPE& at( size_type loc ) const;
Funkcja at()
zwraca referencje do elementu znajdującego się pod indexem loc
. Jest ona o wiele bezpieczniejsza od operatora []
ponieważ sprawdza zakres i w razie przekroczenia rzuca wyjątkiem.
TYPE& back(); const TYPE& back() const;
Funckja back()
zwraca referencje do ostatniego elementu w vektorze.
Podobne: end
iterator begin(); const_iterator begin() const;
Funkcja begin()
zwraca iterator do pierwszego elementu vektora. Wykonywana w stałym czasie.
Podobne: end
size_type capacity() const;
Funkcja capacity()
zwraca liczbę elementów jakie może trzymać vector zanim będzie musiał zmienić swój rozmiar.
Podobne: size, max_size
void clear();
Funkcja clear()
usuwa wszystkie elementy vectora. Wykonywana w czasie liniowym.
bool empty() const;
Funkcja empty()
zwraca true
jeśli vector jest pusty, false
jeśli nie.
iterator end(); const_iterator end() const;
Funkcja end()
zwraca iterator wskazujący tuż za ostatni element vectora. Taka realizacja ułatwia iterację po elementach.
Podobne: begin
iterator erase( iterator loc ); iterator erase( iterator start, iterator end );
Funkcja erase()
usuwa:
loc
start
oraz end
Podobne: clear
TYPE& front(); const TYPE& front() const;
Funkcja front()
zwraca referencje do pierwszego elementu w vektorze. Uruchamiana w stałym czasie.
Podobne: back
iterator insert( iterator loc, const TYPE& val ); void insert( iterator loc, size_type num, const TYPE& val ); void insert( iterator loc, input_iterator start, input_iterator end );
Funkcja instert()
wstawia:
val
przed indeks loc
i zwraca iterator na wstawiony element,num
elementów o wartości val
przed indeks o wartości loc
,start
i end
przed indeks loc
.Przykład:
vector<int> v1; v1.push_back( 0 ); v1.push_back( 1 ); v1.push_back( 2 ); v1.push_back( 3 ); vector<int> v2; v2.push_back( 5 ); v2.push_back( 6 ); v2.push_back( 7 ); v2.push_back( 8 ); cout << "Przed w v2 są: "; for( int i = 0; i < v2.size(); i++ ) cout << v2[i] << " "; cout << endl; v2.insert( v2.end(), v1.begin(), v1.end() ); cout << "Po w v2 są: "; for( int i = 0; i < v2.size(); i++ ) cout << v2[i] << " "; cout << endl;
Wyświetli:
Przed w v2 są: 5 6 7 8 Po w v2 są: 5 6 7 8 0 1 2 3
size_type max_size() const;
Funkcja max_size()
zwraca maksymalną liczbę elementów jakie może trzymać vector. Nie mylić z funkcją capacity.
Podobne: capacity, size
void pop_back();
Funkcja pop_back()
usuwa ostatni element z vectora. Uruchamiana w stałym czasie.
Podobne: push_back
void push_back( const TYPE& val );
Funkcja push_back()
dodaje element o wartości val
na koniec vektora.
Podobne: pop_back
reverse_iterator rbegin(); const_reverse_iterator rbegin() const;
Funkcja rbegin()
zwraca odwrotny iterator wskazujący na koniec vectora. Uruchamiana w stałym czasie.
Podobne: rend
reverse_iterator rend(); const_reverse_iterator rend() const;
Funkcja rend()
zwraca odwrotny iterator wskazujący na początek vectora. Uruchamiana w stałym czasie.
Podobne: rbegin
void reserve( size_type size );
Funkcja reserve()
ustala rozmiar (capacity) do co najmniej rozmiaru size
. Uruchamiana w stałym czasie.
void resize( size_type num, const TYPE& val = TYPE() );
Funkcja resize()
zmienia rozmiar (size) vectora do rozmiaru num
. Jeśli wartość val
jest podana, nowo utworzone elementy będą miały właśnie taką wartość. Funkcja uruchamiana w czasie liniowym.
size_type size() const;
Funkcja size()
zwraca liczbę elementów jakie znajdują się w danym vektorze.
Podobne: capacity, max_size
void swap( container& from );
Funkcja swap()
służy do wymiany elementów między vectorami.
Przykład:
vector<string> v1; v1.push_back("Element w v1"); vector<string> v2; v2.push_back("Element w v2"); v1.swap(v2); cout << "Pierwszy element w v1: " << v1.front() << endl; cout << "Pierwszy element w v2: " << v2.front() << endl;
Wyświetli:
Pierwszy element w v1: Element w v2 Pierwszy element w v2: Element w v1