Comment copier les membres d'un array vector vers une autre... [C++] - Programmation
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);
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...)
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 !!
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)...
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...
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
Marsh Posté le 12-07-2001 à 10:40:11
Enfin merci, c'est plutôt cool les vectors.
Sinon, où est la doc sur les vectors dans la SDK?
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
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?