[C++] Comment copier les membres d'un array vector vers une autre...

Comment copier les membres d'un array vector vers une autre... [C++] - Programmation

Marsh Posté le 12-07-2001 à 00:03:26    

Je sais comment effacer un membre d'un tableau de vector, mais j'aimerais en plus alors déplacer tous les membres suivant celui effacer d'un cran vers le bas.
 
Par exemple: j'efface le membre 5, donc le membre 6 devient le 5, le membre 7 devient le 6, etc...
 
Comment puis-je faire ça?

Reply

Marsh Posté le 12-07-2001 à 00:03:26   

Reply

Marsh Posté le 12-07-2001 à 00:40:55    

euh,  
 
exemple:
 
vector<int> v(10);
vector<int>::iterator it=v.begin()+5;
 
copy(it+1,v.end(),it);


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
Reply

Marsh Posté le 12-07-2001 à 00:43:08    

Tu pourrais expliquer comment ton code marche?
SVP

Reply

Marsh Posté le 12-07-2001 à 00:53:43    

Donc :
vector<int> v(10);  //<- ca c'est ton vecteur, ici, j'en ai mis un au pif qui a 10 elements
vector<int>::iterator it=v.begin()+5;  //<-ca c'est un iterateur sur ton vecteur, il pointe ici sur le 5eme element du vecteur (a priori, qd tu efface ton element, tu devrais utiliser un iterateur qui lui va pointer sur l'element supprime ici 5)
 
copy(it+1,v.end(),it);  //<-ca c'est un algorithme #include <algorithm> qui effectue la copie de tous les elements entre la position it+1 et la fin de ton vecteur dans le meme vecteur mais a partir de la position de l'elt supprime
en gros : *it=*(it+1), *(it+1)=*(it+2), ... *(v.end()-1)=*(v.end())
 
j'espere que j'ai ete suffisament clair (passe minuit, mon cerveau downclocke...)


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
Reply

Marsh Posté le 12-07-2001 à 04:59:39    

Heu...on se calme :) Pas besoin de tout ca !
 
L'interet du vector (ou le prb, c'est selon) c'est justement de faire tout ca pour toi !! Pourquoi tu as choisi un vector et pas un simple tableau (/pointer) ???
 
En fait quand tu delete un element, il deplace tout ce qu'il y a derriere d'un cran...Meme chose quand tu en insert un. Donc si c'est ce que tu cherche c'est parfait (voir exemple plus bas).
 
Le prb, c'est que, a moins de supprimer le dernier element du vector, il y a un deplacement des elements qui prend du temps(d'autant plus que l'element supprime se trouve en tete). Donc au cas ou tu fais de l'insertion/suppression a donf : il y a un gros prb. Mieux vaut choisir les list (ou les deques?).
 
Bref pour exemple (tire de MSDN):
 
vector<int> MyVector;
 
// size = 0
// contenu du vector : {}
 
for (int i=0; i<=9; i++) {
   MyVector.push_back(i);
}
 
// size = 10
// contenu du vector : {0,1,2,3,4,5,6,7,8,9}
// MyVector[1] = 1
 
MyVector.erase(MyVector.begin() + 2);
 
// size = 9
// contenu du vector : {0,2,3,4,5,6,7,8,9}
// MyVector[1] = 2
 
PS: tu aurais pu regarder dans la MSDN : tout ca est explique tres clairement !!


---------------
Si t'es pas net, reste a la buvette
Reply

Marsh Posté le 12-07-2001 à 10:03:34    

euh Willythekid, t'es sur que c'est pas le 2 qui est efface de ton tableau plutot : v.begin() pointe sur le premier element du vecteur (0) et dinc v.begin()+1 pointe sur le 2eme (1)...

Reply

Marsh Posté le 12-07-2001 à 10:14:48    

titi_4js a écrit a écrit :

euh Willythekid, t'es sur que c'est pas le 2 qui est efface de ton tableau plutot : v.begin() pointe sur le premier element du vecteur (0) et dinc v.begin()+1 pointe sur le 2eme (1)...  




 
tu chipottes un peu toi...

Reply

Marsh Posté le 12-07-2001 à 10:25:38    

Ah euh...oui desole :)
C'est avec des conneries comme ca qu'on passe une demi-heure a debugger 3 lignes :)


---------------
Si t'es pas net, reste a la buvette
Reply

Marsh Posté le 12-07-2001 à 10:40:11    

:D
 
Enfin merci, c'est plutôt cool les vectors.
:)
 
Sinon, où est la doc sur les vectors dans la SDK?

Reply

Marsh Posté le 12-07-2001 à 10:44:00    

uh? hein ? "la doc sur les vectors dans la SDK" ???
 
La doc sur la version microsoft (VC++ 6) de la STL est la :
http://msdn.microsoft.com/library/ [...] tdlbhm.htm
 
ou la :
http://www.dinkumware.com/htm_cpl/index.html
 
a+ et bonne chance :)


---------------
Si t'es pas net, reste a la buvette
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed