suis-je juste en supposant que l'ajout / suppression d'éléments à une carte STD :: La carte n'effibe pas les autres éléments (c'est-à-dire qu'ils doivent être déplacés en mémoire) et que ce qui suit soit sûr:
J'ai regardé divers sites avec des informations sur le conteneur mais que vous avez découvert uniquement les cas où les itérateurs sont invalidés, que je connais déjà ... p> J'ai testé un code similaire sur VC9, qui semble Toutefois, cela ne signifie pas que je n'ai pas eu de chance ni que cela ne varie pas sur les compilateurs. P> P>
3 Réponses :
Carte a la propriété importante qui insérant un nouvel élément dans une carte n'invalide pas les itérateurs qui pointent sur des éléments existants. Citation prise de SGI DOCS . P> blockQuote>
Si les itérateurs sont garantis de ne pas modifier, les valeurs qu'elles pointent ne peuvent également pas changer. P>
Naveen a déjà eu une réponse qui était similaire à celle-ci. Sauf si il y a une erreur dans ma logique ce que vous faites est sûr. P>
EDIT 2: Voir point 3 dans SGI DOCS pour voir comment obtenir une valeur de l'opérateur [] est la même chose que d'obtenir la valeur d'un itérateur. p>
Comme je l'ai signalé à Naveen (pas Nadeen), la question ne concerne pas les itérateurs.
Je me rends compte que, mais l'opérateur [] utilise des itérateurs.
Notez que les documents SGI ont parfois de petites discesses à la bibliothèque standard, lorsqu'il s'agit de détails.
Oui, vous pouvez compter sur cela.
// retrieve reference to string stored at "x" // note that since [] returns a reference, it must insert an element at "x" if // it doesn't exists (in this case an empty string) std::string &a= map["x"]; // retrieve reference for "x" again and set value to "foo" map["x"] = "foo"; // use already stored reference a = "bar";
La norme est claire sur ceci dans Les membres d'insertion ne doivent pas affecter la validité des itérateurs et des références au conteneur, et les éléments effacés doivent invalider uniquement les itérateurs et les références aux éléments effacés. P>
blockQuote> 23.1.2 / 8 code> sur les conteneurs associatifs p>
+1. J'ai besoin de garder une copie de la norme à la main. Ma réponse aurait pu être plus concise et définitive.
Ouais, il est toujours judicieux de conserver une instance de Okular / Acrouead Open, vous pouvez donc rechercher rapidement =) Dans ce cas, je me suis souvenu de la discussion que j'avais ici: Stackoverflow.com/questions/516007/... =)
Je vous encourage à upvote @ Greg-Rogers. Parce que c'est le bon, évidemment, alors que la réponse acceptée dit que vous ne pouvez pas en être sûr. Mais la norme est assez claire que les pointeurs sont valables.
regarde les réponses i> Lequel parlez-vous, je n'en ai vu aucun par un "greg-rogers" ...
Je veux dire la question où je lie, ci-dessus :)
Je ne sais pas pourquoi vous avez supprimé votre réponse Nadeen, c'était correct aussi loin que je pouvais voir.
La réponse de Naveen portait sur les itérateurs, que cette question n'est pas
J'ai également supprimé ma réponse, car une deuxième lecture, je suis totalement pas clair quelle est la question réelle.
Duplicaté exact: comme des points de litb à ce sujet: Stackoverflow.com/Questtions/516007/...