réserve de vecteur stl

J’essayais de pré-allouer un vecteur de nombre entier comme celui-ci

vector 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; 

où node_obj [noeud] .c_max est> 0 (j’ai vérifié). La taille de tmp_color semble être égale à zéro de toute façon, après la boucle for. Si quelque chose ne va pas avec le code?

Merci

Si vous voulez faire des assignations dans la boucle comme vous avez écrit, je suggère la manière suivante:

 vector 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; 

reserve n’ajoute pas réellement d’éléments à un vector ; c’est ce que fait le resize . reserve juste un espace pour eux. Vous devez soit append les éléments un par un dans votre boucle en utilisant:

 tmp_color.push_back(tmp_color_idx); 

ou changez votre utilisation de la reserve pour resize .

Vous êtes plutôt chanceux qu’il ne soit pas tombé en panne.

 tmp_color[tmp_color_idx] = tmp_color_idx; 

Dans la ligne ci-dessus, vous accédez aux limites du vecteur.

reserve () n’augmente pas la taille du vecteur, resize () doit être utilisé. Pour moi, la méthode utilisée par Elalfer est encore meilleure pour pré-allouer la taille.