Insérer des éléments n'importe où dans un VECTOR [Résolu]

Signaler
Messages postés
10
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
8 novembre 2011
-
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
-
Bonjour à tous

J'ai un petit problème à propos de la classe Vector fournit par STL. En fait j'aimerai insérer un élément n'importe où dans le vector, j'ai essayé mais les résultats ne sont pas très concluant
Je m'y suis pris comme ceci, je ne trouve pas ça très propre, je présume qu'il y a une autre manière:

/*
nom du vecteur : _vect
 taille du vecteur > 10
*/
{
int elt = 10;
std::vector::iterator it = _vect.begin();
it+=10;
_dic.insert(it,elt);
}

En gros voilà, j'arrive à insérer en début et en fin mais pas n'importe où

Merci pour vos réponses

4 réponses

Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Ben pour inserer, tu fais mon exemple ci-dessus, et pour récupérer un element, le plus simple, c'est encore de faire :
ton_vecteur[pos]

vector v;
v.resize[4];
v[0]=10;
v[1]=20;
v[2]=30;
v[3]=40;

Pour récupérer 20 :
int num=v[1];

Pour insérer 25 à la position 2 (avec la fonction ci-dessus) :
my_insert_func(v, 2, 25);

Ton nouveau vecteur :
{10,20,25,30,40}

Tout ca n'a rien de bien compliqué !

TuRn3r
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est fait exprès. Si tu veux insérer un élément au milieu, c'est très inefficace avec un vector (il faut décaler tous les éléments suivants). Tu peux faire ta propre méthode à la main si tu veux quand même utiliser un vector, mais c'est peut être plus judicieux d'utiliser une liste chainée (std::list)

_____________________________________
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
//
vec le vecteur
// pos l'index ou inserer l'element
// elem l'element a inserer


template <class T>
void my_insert_func(std::vector<T> & vec, int pos, T elem)
{

  std::vector<T>::iterator it = vec.begin();
  it+=pos;
  vec.insert(it, elem);

}

puis :
my_insert_func(
vect, 10, elt);







TuRn3r
Messages postés
10
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
8 novembre 2011

merci pour les réponses, en fait le côté bénéfique du vecteur pour l'utilisation que j'en ait c'est que je peux acquérir un élément à n'importe quelle position avec vect.at(int position), je voulais également pouvoir insérer un élément n'importe où. Apparament ceci ne fonctionne pas. Si avec une liste je peux insérer n'importe où, je ne peux pas acquérir un élément à une position donnée. Je pense donc que je suis piégé, je voulais bien utiliser map mais bon au niveau des performance c'était pas top.
Auriez-vous une autre solution ? Sinon et bien tant pis ce n'est pas grave, je trouverais bien autre chose

Bonjour chez vous