Zmiana wielkości vectora a adres jego elementów

0

Cześć,
mam do was dwa pytania:

  1. Mam jakiś vector np. o długości 10 elementów np.
vector<double>tab(10)

Każdy element tego vectora tj. np. tab[k] (0<k<10) ma jakiś swój adres tj. &tab[k] != NULL
Moje pytanie brzmi:
Czy zmieniając rozmiar vectora (np. do 100 elementów) adres wszystkich jego poprzednich elementów będzie takie sam czy mogą one ulec zmianie?

  1. dlaczego w poniższym kodzie wywala mi błąd, że out of range:
	vector<double>tab; //(2)
	//tab[0] = 3.0; 
	//tab[1] = 2.0; 
	tab.push_back(3.0);
	tab.push_back(2.0);
	tab.push_back(4.0);
	tab[2] = 1.0;

	cout << "tabsize = " << tab.size() << endl; //3
	for(int i=0; tab.size();i++)
		cout << "tab[i] = " << tab[i] << endl;

Gdy nie wyświetlam wyników to nie wywala mi błędu (tzn. gdy nie korzystam z tej ostatniej pętli)...

Z góry dziękuję wszystkim za pomoc w wyjaśnieniu szczególnie pierwszej zagwozdki.

0

Indeksujemy od 0.

for(int i=0; tab.size() - 1;i++)
                cout << "tab[i] = " << tab[i] << endl;

Poczytaj o iteratorach, zanim przejdziesz do innych kontenerów.

0
  1. http://www.cplusplus.com/reference/vector/vector/resize/ opisuje dokładnie co się dzieje przy zmianie wielkości wektora
  2. Jak wywala błąd to zawsze pisz jaki...

Edit
Za długo coś te posty piszę :P

1

Czy zmieniając rozmiar vectora (np. do 100 elementów) adres wszystkich jego poprzednich elementów będzie takie sam czy mogą one ulec zmianie?

Mogą ulec zmianie i najpewniej ulegną.

dlaczego w poniższym kodzie wywala mi błąd, że out of range:

for(int i=0; tab.size();i++)

Patrz na ten fragment, dopóki nie odnajdziesz błędu (hint: brak jawnego warunku oraz fakt, że zwyczajowo wszystko iterowane jest od zera).

0

hehe, rzeczywiście te drugie pytanie to była porażka ;D -> pewnie z przemęczenia :) (cały dzień siedzę na pewnym projektem...)
Dziękuję za informację i wskazanie błędu!!!
pozdrawiam

0

Możesz zrobić:
tab.reserve(1000);
wtedy, dopóki rozmiar nie przekroczy 1000 tab nie będzie zmieniać adresów elementów.
Z tym że pamięć będzie już zarezerwowana.

1 użytkowników online, w tym zalogowanych: 0, gości: 1