====== Vector ====== //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: * do poszczególnych elementów chcemy dostawać się poprzez index, * chcemy przeglądać elementy w dowolnej kolejności, * dodajemy i usuwamy elementy jedynie z końca kolekcji. \\ Implementacja vectora w bibliotece standardowej C++ to szablon z dwoma parametrami. template < class T, class Allocator = allocator > 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ć{{:opis_kontenera:vector.cpp|tutaj (vector.cpp)}} ===== Skłdniki ===== Vector udostępnia szereg metod którymi możemy manipulować jego zawartością.\\ |[[vector#Konstruktory]]|Tworzą vector i inicjalizują przekazanymi danymi.| |[[vector#Operatory]]|Opeatory manipulacji vectorem.| |[[vector#assign]]|Dodaje elementy do vectora.| |[[vector#at]]|Zwraca element z podanego miejsca.| |[[vector#back]]|Zwraca referencje do ostatniego elementu.| |[[vector#begin]]|Zwraca iterator wskazujący na pierwszy elementu.| |[[vector#capacity]]|Zwraca liczbę elementów jakie może trzymać vector.| |[[vector#clear]]|Usuwa wszystkie elementy z vectora.| |[[vector#empty]]|Zwraca true jeśli vector jest pusty.| |[[vector#end]]|Zwraca iterator wskazujący za ostatni element.| |[[vector#erase]]|Usuwa dane elementy z vectora.| |[[vector#front]]|Zwraca referencje na pierwszy element.| |[[vector#insert]]|Dodaje elementy do vectora.| |[[vector#max_size]]|Zwraca maksymalną liczbę elementów jakie może trzymać vector.| |[[vector#pop_back]]|Usuwa ostatni element z vectora.| |[[vector#push_back]]|Dodaje element na koniec vectora.| |[[vector#rbegin]]|Zwraca odwrotny iterator wskazujący na koniec vectora.| |[[vector#rend]]|Zwraca odwrotny iterator wskazujący na początek vectora.| |[[vector#reserve]]|Ustawia minimalny rozmiar vectora.| |[[vector#resize]]|Zmienia rozmiar vectora.| |[[vector#size]]|Zwraca liczbę elementów jakie trzyma vector.| |[[vector#swap]]|Wymienia elementy jednego vectora z drugim.| === Konstruktory === 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. === Operatory === 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: * mają taki sam rozmiar, * każdy element na pozycji ''i'' jednego vectora jest równy elementowi na pozycji ''i'' drugiego vectora. === assign === 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'', * elementy z zakresu wskazywanego przez iteratory ''start'' oraz ''end''. === at === 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. === back === TYPE& back(); const TYPE& back() const; Funckja ''back()'' zwraca referencje do ostatniego elementu w vektorze.\\ Podobne: [[vector#end]] === begin === iterator begin(); const_iterator begin() const; Funkcja ''begin()'' zwraca iterator do pierwszego elementu vektora. Wykonywana w stałym czasie.\\ Podobne: [[vector#end]] === capacity === size_type capacity() const; Funkcja ''capacity()'' zwraca liczbę elementów jakie może trzymać vector zanim będzie musiał zmienić swój rozmiar.\\ Podobne: [[vector#size]], [[vector#max_size]] === clear === void clear(); Funkcja ''clear()'' usuwa wszystkie elementy vectora. Wykonywana w czasie liniowym. === empty === bool empty() const; Funkcja ''empty()'' zwraca ''true'' jeśli vector jest pusty, ''false'' jeśli nie. === end === 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: [[vector#begin]] === erase === iterator erase( iterator loc ); iterator erase( iterator start, iterator end ); Funkcja ''erase()'' usuwa: * element pod indeksem ''loc'' * elementy w zakresie ustalonym przez iteratory ''start'' oraz ''end'' Podobne: [[vector#clear]] === front === TYPE& front(); const TYPE& front() const; Funkcja ''front()'' zwraca referencje do pierwszego elementu w vektorze. Uruchamiana w stałym czasie.\\ Podobne: [[vector#back]] === insert === 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: * element o wartości ''val'' przed indeks ''loc'' i zwraca iterator na wstawiony element, * ''num'' elementów o wartości ''val'' przed indeks o wartości ''loc'', * elementy z zakresu wzyznaczanego przez iteratory ''start'' i ''end'' przed indeks ''loc''. Przykład: vector v1; v1.push_back( 0 ); v1.push_back( 1 ); v1.push_back( 2 ); v1.push_back( 3 ); vector 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 === max_size === size_type max_size() const; Funkcja ''max_size()'' zwraca maksymalną liczbę elementów jakie może trzymać vector. Nie mylić z funkcją [[vector#capacity]].\\ Podobne: [[vector#capacity]], [[vector#size]] === pop_back === void pop_back(); Funkcja ''pop_back()'' usuwa ostatni element z vectora. Uruchamiana w stałym czasie.\\ Podobne: [[vector#push_back]] === push_back === void push_back( const TYPE& val ); Funkcja ''push_back()'' dodaje element o wartości ''val'' na koniec vektora.\\ Podobne: [[vector#pop_back]] === rbegin === reverse_iterator rbegin(); const_reverse_iterator rbegin() const; Funkcja ''rbegin()'' zwraca odwrotny iterator wskazujący na koniec vectora. Uruchamiana w stałym czasie.\\ Podobne: [[vector#rend]] === 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: [[vector#rbegin]] === reserve === void reserve( size_type size ); Funkcja ''reserve()'' ustala rozmiar ([[vector#capacity]]) do co najmniej rozmiaru ''size''. Uruchamiana w stałym czasie. === resize === void resize( size_type num, const TYPE& val = TYPE() ); Funkcja ''resize()'' zmienia rozmiar ([[vector#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 === size_type size() const; Funkcja ''size()'' zwraca liczbę elementów jakie znajdują się w danym vektorze.\\ Podobne: [[vector#capacity]], [[vector#max_size]] === swap === void swap( container& from ); Funkcja ''swap()'' służy do wymiany elementów między vectorami.\\ Przykład: vector v1; v1.push_back("Element w v1"); vector 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