我试图像这样预先分配一个整数向量
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的大小无论如何都显得为零。如果代码有问题吗?
由于
答案 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使用的方法甚至可以更好地预先分配大小。