Как получить доступ к индексу в векторе без сегментации - PullRequest
0 голосов
/ 20 декабря 2011

Я знаю, что это просто, поэтому заранее прошу прощения.

Я пытаюсь получить доступ к вектору по индексу. Например ...

vector<float> some_vec;
int i = 0;

for (some iterator loop here)
{
    //snip
    some_vec[i] = some_float;
    i++;
}

Что я делаю не так?

Ответы [ 4 ]

5 голосов
/ 20 декабря 2011

После

std::vector<float> some_vec;

ваш вектор пуст.Вы не должны получить доступ к какому-либо элементу, потому что его нет.

Если вы хотите поместить значения в него, вам нужно добавить их к вектору, используя push_back()

for (some iterator loop here)
{
    //snip
    some_vec.push_back(some_float);
    i++;
}

В качестве альтернативы, если вы заранее знаете размер, и если конструкцияфиктивных значений в векторе дешево (как для float и других встроенных модулей), вы можете resize() вектор заранее

some_vec.resize(42);

или создать его с нужным количеством элементов

std::vector<float> some_vec(42);

Учитывая любой из двух приведенных выше, вы можете получить доступ к элементам 0..41 в векторе.

3 голосов
/ 20 декабря 2011

вызовите функцию resize () для вашего вектора, а затем вызовите push_back () для добавления элементов.После этого вы можете получить доступ к элементам с помощью индексации.

1 голос
/ 20 декабря 2011

Я думаю, что ваш vector пуст.Используйте push_back(some_float), чтобы добавить к нему элементы.

1 голос
/ 20 декабря 2011

Возможно, проблема в другом месте кода, который мы не видим, но, скорее всего, учитывая, что вы не назвали resize(), push_back() или insert(), что i находится вне вектора. Используйте some_vec.at(i) = some_float;, чтобы проверить, что i находится в допустимом диапазоне для вектора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...