Effacer contenu vecteur [Résolu]

Signaler
Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007
-
Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007
-
bonjour
comment pourrais-je effacer le contenu d'une ou plusieurs case d'un vecteur dans une boucle.
exemple:
vector <string> vec;
vector <string>::iterator vec_iter;

for (vec_iter=vec.begin() ; vec_iter <= vec.end() ; vec_iter++)
{
if ( (*vec_iter == "champs") || (*vec_iter=="autrechamps") )
{
vec.erase(vec_iter);
}
}

le soucis: lorsque j'efface le contenu d'une case , vec_iter=chainevide.
Comment faire pour ne pa perdre le contenu de vec_iter? (prochaine case du vecteur)

merci pour vos reponse

5 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
erase te retourne un itérateur, il faut que tu l'utilises, et ne pas
incrémenter quand tu fais erase. Par conséquent, la boucle for n'est
pas appropriée:



vector <string> vec;

vector <string>::iterator vec_iter;



vec_iter=vec.begin()

while(vec_iter != vec.end())

{

if ((*vec_iter == "champs") || (*vec_iter=="autrechamps"))

vec_iter = vec.erase(vec_iter);

else

vec_iter++;

}
Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007

Ah j'oubliais



Je souhaiterais avoir un pointeur sur mon vecteur

D'apres la MSDN il suffit de faire:



vector < string > vec;

vec.push_back("test");

vec.push_back("pointeur");



// declaration du pointeur

vector < string >::pointer ptr;

ptr = vec[0];



mais ca ne passe pas a la compile (meme l'exemple fourni dans la MSDN)



PS: j'utilise Visual Studio
Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007

Je rectifies



je souhaite obtenir un pointeur sur le type du vecteur et non sur le vecteur lui meme



Pour l'instant j'ai declare un pointeur du style string * ptr;

Je l'ai fais pointer sur le 1er champ du vecteur ptr = vec[0];

Est ce la meilleure solution ?



merci pour vos reponses
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Un pointeur sur le type du vecteur? Je vois pas ce que tu veux dire par
la. Si tu veux un pointeur sur un élément du vecteur, tu n'a qu'a faire
string* ptr = &vec[0]

(string* ptr = vec[0] ne marchera pas car vec[0] est de sype string et non string*)
Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007

Ah effectivement j'ai oubli de preciser l'adresse du premier element (&) dans mon message



Mais bon ma solution fonctionne.

Merci a toi



PS meme si il existe un type pointer dans le vector (je n'arrive pas a m'en servir)