Insérer des éléments n'importe où dans un VECTOR

Résolu
Weedygamer Messages postés 10 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 8 novembre 2011 - 5 déc. 2006 à 21:36
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 - 7 déc. 2006 à 17:06
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

turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
7 déc. 2006 à 17:06
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
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 déc. 2006 à 21:49
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)

_____________________________________
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
6 déc. 2006 à 10:13
//
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
0
Weedygamer Messages postés 10 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 8 novembre 2011
7 déc. 2006 à 16:42
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
0
Rejoignez-nous