stl矢量储备

时间:2011-01-22 03:05:08

标签: c++ vector allocation

我试图像这样预先分配一个整数向量

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 [node] .c_max是&gt; 0(我查了)。在for循环之后,tmp_color的大小无论如何都显得为零。如果代码有问题吗?

由于

3 个答案:

答案 0 :(得分:3)

reserve实际上并未向vector添加元素;这就是resize的作用。 reserve只为他们预留空间。您需要在循环中逐个添加元素,使用:

tmp_color.push_back(tmp_color_idx);

或将reserve的使用更改为resize

答案 1 :(得分:2)

如果您想在编写循环时进行分配,我建议采用以下方式:

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;

答案 2 :(得分:1)

你很幸运,它没有崩溃。

tmp_color[tmp_color_idx] = tmp_color_idx;

在上面一行中,您正在访问向量的界限。

reserve()不会增加向量的大小,应该使用resize()。 对我来说,Elalfer使用的方法甚至可以更好地预先分配大小。