Jaka jest różnica między rozmiarem vectora (kontener z STL'a rzecz jasna), a jego pojemnością ?
Dla przykładu mam taki kod:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> moj_wektor(100); // WEKTOR KTÓRY MA 100 elementów
std::cout << "Pojemnosc wektora: " << myvector.capacity() << '\n'; // RZECZ JASNA BEDZIE 100
myvector.resize(10); // ZMNIEJSZAM ROZMIAR DO 10
std::cout << "Pojemnosc wektora: " << myvector.capacity() << '\n'; // POJEMNOŚĆ WEKTORA SIE NIE ZMNIEJSZYLA
return 0;
}
Po co w ogóle jest ta metoda resize() ? Ma ustawiac rozmiar vectora, tymczasem tego nie robi. Z tego wniosek że istnieje różnica między rozmiarem vectora i jego pojemnością...
Powiedzmy zatem że mamy vector o rozmiarze 100 elementów zdefiniowany tak:
vector<int> myVec(100);
wiemy że jego rozmiar to 100. Zmniejszamy jego rozmiar do 10 za pomocą metody resize();
vector<int> myVec.resize(10);
Teraz ma tylko 10 elementów.
Odpalamy jakąś pętle w której dodajemy do niego więcej niż 10 elementów.
for(int i=0; i<55; i++)
myVec.push_back(i);
**
I kod się kompiluje, chociaż dodaliśmy więcej elementów niż wynosi jego rozmiar ?** 55, a on sam ma rozmiar 10.
Dodatkowo jak to sobie wydrukujemy, tj. zawartość vectora:
for(std::vector<int>::const_iterator it = myVec.begin(); it != myVec.end(); it++)
std::cout << *it << ' ';
To dostajemy w wyniku tego 10 zer i liczby od 0 do 54, tak jakby zostały zarezerwowane te pierwsze elementy, tj. 10 zer a następnie dodane 55 liczb z tej pętli.
**Pytanie kolejne: Dlaczego te liczby z pętli nie nadpisały tych zer które pewnie powstały w wyniku działania funkcji resize() ? **