STL векторный резерв - PullRequest
       18

STL векторный резерв

1 голос
/ 22 января 2011

Я пытался предварительно выделить вектор целого числа, как этот

vector<int> tmp_color; tmp_color.reserve(node_obj[node].c_max);
    for(int tmp_color_idx = 0; tmp_color_idx < node_obj[node].c_max; tmp_color_idx++)
         tmp_color[tmp_color_idx] = tmp_color_idx;

, где node_obj [узел] .c_max равен> 0 (я проверял).Размер tmp_color в любом случае равен нулю после цикла for.Если что-то не так с кодом?

Спасибо

Ответы [ 3 ]

3 голосов
/ 22 января 2011

reserve фактически не добавляет элементы к vector;это то, что делает resize.reserve просто резервирует место для них.Вам нужно либо добавить элементы по одному в цикле, используя:

tmp_color.push_back(tmp_color_idx);

, либо изменить использование reserve на resize.

2 голосов
/ 22 января 2011

Если вы хотите сделать назначения в цикле, как вы написали, я предлагаю следующий способ:

vector<int> tmp_color(node_obj[node].c_max);
for(int tmp_color_idx = 0; tmp_color_idx < node_obj[node].c_max; tmp_color_idx++)
     tmp_color[tmp_color_idx] = tmp_color_idx;
1 голос
/ 22 января 2011

Вам очень повезло, что он не разбился.

tmp_color[tmp_color_idx] = tmp_color_idx;

В приведенной выше строке вы получаете доступ за пределами вектора.

reserve () не увеличивает размер вектора, следует использовать resize (). Для меня метод, используемый Элальфером, даже лучше предварительно определить размер.

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