Нет ничего плохого в том, что вы используете vector
, кроме индексации (может быть, немного странно, но не неправильно). Использование метода изменения размера vector
неправильно. Для предварительного выделения вектора обычно используются два метода. resize()
и reserve()
.
Один может использоваться в случае, если вам нужно индексировать vector
.
std::vector<int> test(10, 0); // creating vector of 10 items set to 0
test.resize(100); // resizing to allocate space for 100 elements
// test.size() == 100
for(size_t i = 0; i < test.size(); ++i)
{
test[i] = i;
std::cout << "Filling " << i << "th element." << std::endl;
}
Другой обычно используется, когда вам не нужен индекс.
std::vector<int> test;
test.reserve(100); // reserve space for at least 100 elements
// test.size() == 0
for(size_t i = 0; i < 100; ++i)
{
test.push_back(i); // will not allocate new memory
}
Проблема, с которой вы столкнулись, заключается в том, что вы изменяете размер вектора для хранения 0 элементов на первой итерации, а затем получаете доступ к элементу с индексом 0. То же самое будет go для любого другого последующего индекса.