Aby móc używać dobrodziejstwa jakim są vectory, trzeba dołączyć plik nagłówkowy "vector":

#include <vector>

Klasa vector należy do przestrzeni nazw "std"(Standard Template Library), dlatego tak jak w przypadku strumieni I/O, trzeba zadeklarować, że będziemy używać tej przestrzeni:

...
using namespace std;
...

Klasa vector jest specjalną, dynamiczną tablicą. Do tej pory pracując z tablicami z góry musieliśmy określać jej rozmiar, bądź operować dynamicznie na tablicy, vector to taka tablica jednowymiarowa, która dynamicznie się rozszerza. Wyobraź sobie, że masz tablicę 10-elementową typu int i musisz użyć jeszcze jedenastego elementu, w przypadku vectora rozszerzasz go to jedenastu elementów i po sprawie. Nie musimy się już martwić, że wyjdziemy poza zakres tablicy, bo sami możemy ten zakres kontrolować.

Powiedzmy, że potrzebujemy tablicy typu int:

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tablica_intow;
//tablica typu int, narazie pusta, jej wielkość wynosi 0 elementów

  vector<int> Tab_int(
20
);
//tablica typu int, jak konstruktor podajemy jej wilekość, 20-elementowa

  vector<float> tablica_floatow;
//tablica typu float, 0-elementowa

  vector<float> Tab_float(
100
);
//tablica typu float, 100-elementowa

  system(
"PAUSE"
);
  return
0
;
}


Z vectorem możemy pracować tak jak z tablicami, możemy przypisywać wartości elementom vectora odwołując się poprzez indeks:

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tablica_intow(
3
);
  tablica_intow[
0
]=
3451
;
  tablica_intow[
1
]=
432
;
  tablica_intow[
2
]=
-42
;
  cout<<tablica_intow[
0
]<<
" "
<<tablica_intow[
1
]<<
" "
<<tablica_intow[
2
]<<endl;
  system(
"PAUSE"
);
  return
0
;
}


Metoda size() - wielkość vectora

Pierwszą metodą klasy vector, jaką poznamy, to metoda size(), służy ona do zwracania, aktualnej wielkości vectora, czyli ilości elementów z których się składa. Dzięki niej na bieżąco wiemy jak wielki jest nasz vector.

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tablica_intow(
3
);
  cout<<tablica_intow.size()<<endl;
//metodą size zwracamy wielkość vectora tablica_intow, czyli u nas 3

  
//wielkości tablicy często używamy w pętlach, jako warunku zakończenia pętli

  for(int i=
0
;i<tablica_intow.size();i++) tablica_intow[i]=i+
50
;
  for(int i=
0
;i<tablica_intow.size();i++) cout<<tablica_intow[i]<<
" "
;
  cout<<endl;
  system(
"PAUSE"
);
  return
0
;
}


Metoda resize() - zmiana wielkości vectora

Kolejną metodą jest resize(). Ustawia ona nową wielkość wektora, w ten sposób możemy szybko zwiększać lub zmniejszać nasz vector. W nawiasie podajemy nową ilość elementów vectora. Dla przykładu, jeżeli mamy vector 5 elementowy, i nowa wartość jaką mu nadamy będzie 3, to pierwsze 3 elementy pozostają bez zmian, natomiast 2 ostatnie, które się już nie mieszczą w vectorze zostają po prostu usunięte. W przypadku powiększania vectora, wszystkie elementy, które były w vectorze pozostają bez zmian, a te które zostały dodane, przyjmą wartości, które są aktualnie w pamięci.

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tablica_intow(
60
);
  tablica_intow.resize(
40
);
//metodą resize nadajemy nową wielkość vectora tablica_intow

  tablica_intow.resize(tablica_intow.size()+
10
);
//metodą resize+size zwięksamy wielkość vectora tablica_intow

  tablica_intow.resize(tablica_intow.size()-
20
);
//metodą resize+size zmniejszamy wielkość tablica_intow

  system(
"PAUSE"
);
  return
0
;
}


Metoda clear() - wyczyszczenie vectora

Metoda clear(), służy do usuwania wszystkich wartości z vectora, czyli ustawienia do do wielkości 0-elementowej. Pamiętajmy, że vector to tablica dynamiczna, dlatego przed wyjściem z programu, trzeba zwolnić wszystkie elementy tablicy.

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tablica_intow;
//vector 0-elementowy

  tablica_intow.resize(
40
);
//vector 40-elementowy

  cout<<tablica_intow.size()<<endl;
  tablica_intow.clear();
//znowu vector 0-elementowy

  cout<<tablica_intow.size()<<endl;
  system(
"PAUSE"
);
  return
0
;
}


Metody push_back()/pop_back() - dodawanie/usuwanie ostatniego elementu vectora

Metoda push_back() służy dodawaniu nowej wartości na koniec vectora, za wszystkie istniejące wartości w vectorze. Należy zwrócić uwagę, także na fakt, że wielkość vectora zwiększy się o 1 element. W nawiasie podajemy wartość nowo dodawanego elementu

Metoda pop_back() usuwa ostatni element w vectorze, zmniejszając jego rozmiar o 1 element.

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tablica_intow;
  tablica_intow.push_back(
10
);
  tablica_intow.push_back(
20
);
  tablica_intow.push_back(
-30
);
  tablica_intow.push_back(
100
);
  cout<<tablica_intow.size()<<endl;
//po dodaniu 4 elementów, vector będzie 4-elementowy

  tablica_intow.pop_back();
//usuwamy ostatnią wartość, vector będzie 3-elementowy

  cout<<tablica_intow.size()<<endl;
  tablica_intow.clear();
  system(
"PAUSE"
);
  return
0
;
}


Iterator w vector

Iterator to wskaźnik na jakiś element w vectorze. Metodą begin() uzyskujemy adres na pierwszy element, natomiast end() na ostatni. Do operacji w środku vectora wymagane jest odwoływanie się właśnie poprzez iteratory.

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tab(
20
);
  vector<int>::iterator pierwszy_element=tab.begin();
//iterator czyli wskaźnik na pierwszy element

  vector<int>::iterator ostatni_element=tab.end();
//iterator na ostatni element

  vector<int>::iterator dziesiaty_element=tab.begin()+=
9
;
//10 element, pierwszy element zwiększamy o 9

  *dziesiaty_element=
10
;
//odwołanie się do wartości poprzez iterator(wskaźnik)

  for(vector<int>::iterator i=tab.begin();i!=tab.end();i++) cout<<*i<<endl;
  
//wyświetlenie elementów poprzez iteratory(wskaźniki)

  tab.clear();
  system(
"PAUSE"
);
  return
0
;
}


Metoda insert() - wstawianie elementu do vectora

Gdy wstawiamy element na koniec vectora sprawa jest prosta, bo nie robimy nic poza tym. Inaczej jest w przypadku wstawiania elementu w inne miejsce, bo aby wstawić element nie na koniec to trzeba przesunąć wszystkie elementy, przed tym nowym elementem. Dla przykładu mamy tablicę 4-elementową, chcemy na miejsce drugie o indeksie 1, wstawić nową wartość. W tym celu, musimy przesunąć wartości o indeksach 1,2 i 3 o jedno miejsce do przodu, więc takie przesuwanie jest mało wydajne. Najmniejsza wydajność jest gdy chcemy wstawić element na pierwsze miejsce, wtedy musimy przesunąć wszystkie elementy w tablicy.

Metoda insert przyjmuje 2 argumenty, pierwszy to indeks w vectorze, na który ma być wstawiony element, właśnie tutaj podajemy iterator(wskaźnik) na element, w który chcemy wstawić nową wartość. Załóżmy, że stworzymy tablicę 4-elementową i w sam środek(trzeci element, indeks 2) chcemy wstawić nową wartość.

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tab;
  tab.push_back(
10
);
  tab.push_back(
20
);
  tab.push_back(
-30
);
  tab.push_back(
100
);
  for(int i=
0
;i<tab.size();i++) cout<<tab[i]<<
" "
;
//wyświetlamy zawartość vectora

  cout<<endl;
  vector<int>::iterator it=tab.begin()+=
2
;
//iterator na trzeci element

  tab.insert(it,
3000
);
//wstawiamy wartość 3000 jako trzeci element

  for(int i=
0
;i<tab.size();i++) cout<<tab[i]<<
" "
;
//wyświetlamy zawartość vectora

  cout<<endl;
  tab.clear();
  system(
"PAUSE"
);
  return
0
;
}


Metoda erase() - usuwanie elementu z vectora

Metodą erase() możemy usunąć element z dowolnego miejsca w vectorze. Przy czym należy pamiętać, że gdy usuwamy element to elementy za usuwanym punktem będą przesunięte o 1 do tyłu. Oczywiście tutaj także będziemy potrzebowali iteratora do usuwanego elementu, który podajemy w nawiasie:

#include <iostream>
#include <vector>


using namespace std;

int main(int argc,char* argv[])
{
  vector<int> tab;
  tab.push_back(
10
);
  tab.push_back(
20
);
  tab.push_back(
-30
);
  tab.push_back(
100
);
  for(int i=
0
;i<tab.size();i++) cout<<tab[i]<<
" "
;
//wyświetlamy zawartość vectora

  cout<<endl;
  vector<int>::iterator it=tab.begin()+=
2
;
//iterator na trzeci element

  tab.erase(it);
//usuwamy trzeci element

  for(int i=
0
;i<tab.size();i++) cout<<tab[i]<<
" "
;
//wyświetlamy zawartość vectora

  cout<<endl;
  tab.clear();
  system(
"PAUSE"
);
  return
0
;
}
Wejść na stronę:     Ilość osób online:
Prawa autorskie © 2008 crayze. Wszelkie prawa zastrzeżone.
crayze7@gmail.com