2015-02-12 2 views
-3

Это, наверное, очень простой вопрос, однако он преследует меня. Я могу получить данные в контейнере, но я не могу потом распечатать его на консоли.Почему «std :: cout << myVector [x] [x] << std :: endl» создает ошибку индексации?

Следующая производит подстрочный из ошибки отладки диапазона

Вот мой код

std::vector<std::vector<int>> myVector; 

for (int x = 0; x != 18; x++) 
{ 
    myVector.push_back(std::vector<int>(x,x)); 
    std::cout << myVector[x][x] << std::endl; 
} 

Большое спасибо!

+2

Индексы в C++ с нуля. Вы помещаете элементы 'x' в вектор, но вы пытаетесь получить доступ к элементу' x + 1'st. –

+0

Другими словами, это говорит вам, что это вне диапазона, потому что это (ошибки полезны!). Я также добавлю, что большинство популярных языков программирования имеют индексы на основе 0. – keyser

ответ

2

Когда вы делаете std::vector<int>(x,x) внутри петли, когда x=0 вы выделяете zero elements. В других случаях вы выделяете x элементов (индекс строки: x и индексы столбцов: 0,1,...x-1) и доступ x+1-й элемент в x-й строке.

Меняем его

for (int x = 0; x != 18; x++) 
{ 
    myVector.push_back(vector<int>(x+1,x)); 
    std::cout << myVector[x][x] << std::endl; 
}