[C++] Insert dans un vector sans iterator

Résolu/Fermé
cedrixi - 8 août 2007 à 16:28
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 9 août 2007 à 20:53
Bonjour,
Tout est dans le titre. Peut-on insérer un élément dans un vector de la librairie standard, sans utiliser un iterator comme d'habitude, mais la fonction membre [] (pour sélectionner l'endroit d'insertion voulu)?
Merci d'avance!
c

3 réponses

mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 7 802
8 août 2007 à 20:18
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Pour moi la réponse est non. Tu ne peux pas le implémenter car il entrerait en conflit avec l'opérateur [] usuel. On pourrait imaginer que tu implémentes un autre opérateur ou une fonction insert qui t'arrange plus.

Ceci dit il existe des conteneurs peut être plus adapté pour ce que tu veux faire, par exemple les std::set. Que cherches-tu à faire ?

Bonne chance
0
cedrixi Messages postés 1 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 12:03
C'est bien ce que je pensais. Pour ce que je cherche à faire, c'est lister les points d'un snake multi-échelle, ce qui revient juste à une gestion d'une liste ordonnée évolutive, avec des insertions où je veux. Je voudrai rester en Vector (histoire de compatibilité avec le projet dans lequel je m'insère...). Mais bon, je peux très bien faire

V.insert(V.begin() + pos, value);

au lieu d'accéder à V[pos]

et hop pas d'itérateur
Merci pour ton aide en tout cas!

c
0
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 7 802
9 août 2007 à 20:53
A ce moment là c'est mieux d'utiliser un std::set, si tu as une relation d'ordre définie sur tes éléments. Par défaut un std::set utilise l'opérateur <. Pour un std::set l'accès et l'insertion se font en O(log(n)) et sans réallocation.

Le problème des insertions dans un vector (de même que les push_back) c'est que si tu dois réallouer ton vecteur, tu perds beaucoup de temps (il faut reparcourir le vector). De plus, une insertion dans ton cas force en plus à reparcourir tout les éléments situés après l'endroit où tu insères. A noter que la méthode vector propose une méthode reserve pour éviter les problème de réallocation si tu connais la taille maximale du vector.

Bref à toi de voir ce qui est le plus adapté...
0