2015-06-02 2 views
0

Вот мой код:Доступа динамического вектора вектора

std::vector< std::vector<int> > v; 

v.push_back(std::vector<int>(2)); 
v[0].push_back(10); 

std::cout<<(v[0])[0]; 

Но он печатает «0» вместо 10.

Я пытаюсь сделать динамический вектор, который содержит вектор с фиксированным размером ,

Может кто-нибудь помочь мне визуализировать происходящее?

+0

Подсказка: прочитать о том, что 'делает push_back'. – juanchopanza

ответ

3

Код глючит:

std::vector<int>(2) 

делает вектор размера 2 инициализируется deault построен int (который равен нулю), так что толкает 10 просто делает вектор размером 3 Вт/10 в конце (индекс 2).

+0

, но я использовал 'v [0] .push_back (10);' if i будет инициализировать основной вектор с фиксированным размером 'std :: vector > v (2);' тогда он напечатает 10. –

+0

@CarloBrew, изначально ваш «главный» вектор пуст, то вы добавляете к нему вектор размера 2 (с индексом 0). после этого вы добавляете '10' к только что добавленному вектору, поэтому последние становятся размером 3 (с' 10' в индексе 2): 'assert (v [0] .size() == 3u && v [0] [2] == 10) '. Но ваш «главный» вектор все еще имеет размер 1. – zaufi

+0

@CarloBrew: векторы никогда не имеют фиксированного размера, поэтому нет. То, что вы делаете _actually_, создает вектор с начальным размером, а затем добавляет дополнительный элемент в конец. –

0

После прочтения больше о push_back, вот что я понимаю, до сих пор, и как я установил его

std::vector< std::vector<int> > vo; //empty vector of vectors 
v.push_back(std::vector<int>(2));  //insert element 
v.push_back(std::vector<int>(2));  //insert element 

v[0][0] = 1;       
v[0][1] = 2;       //allocated so it's alright to add elements 
v[1][0] = 3; 
v[1][1] = 4; 
std::cout<<v[1][1]; //4 
+0

Обратите внимание, что внутренние векторы могут быть изменены. Создание std :: vector без изменения размеров - это не тривиальная задача, и, если это требуется для назначения, ваш инструктор - правильный ублюдок. – user4581301

+0

Вы имеете в виду v [0] .resize? –

+0

clear, insert, erase, push_back, pop_back, resize, emplace и emplace_back все изменят размер как внутреннего, так и внешнего векторов. – user4581301

Смежные вопросы