2010-11-12 8 views
1

I « d aime utiliser un vecteur :: pointeur pour push_back données .. ilComment puis-je pousser push_back dans un vecteur via un vecteur :: pointeur?

int num; 
vector<int> v; 
vector<int>::pointer ptr; 

ptr = &v[0]; 

ptr->push_back(num); // fail 
ptr.push_back(num); // fail 
ptr.push_back(&num); // fail 
*ptr.push_back(num); // fail 

rien ne semble fonctionner .. toutes les idées seraient appréciées ..

+1

Si vous êtes nouveau dans le langage C++, ne soyez pas gêné de poser des questions comme celle-ci ici. Si j'avais eu une telle ressource sur le robinet quand j'apprenais le C++, cela m'aurait sauvé beaucoup de temps et de perplexité. Un bon livre d'introduction serait également souhaitable. –

Répondre

1

Vous ne pouvez pas . Vous devez utiliser l'objet vectoriel original.

Si vous souhaitez avoir un pointeur vers un vecteur, vous pouvez effectuer les opérations suivantes:

vector<int> v; 
vector<int> *pointer = &v; 

v.push_back(4); 
pointer->push_back(3); 

Comme un commentaire, le type de vector<int>::pointer dans votre code devrait être int *.

+0

merci à tous pour vos réponses .. maintenant je l'obtiens .. Problème résolu! Je ne suis pas nouveau en C++, les vecteurs sont nouveaux pour moi et je suis un peu rouillé! (Blush) –

+0

@Mary P: Heureux d'aider. Sur Stack Overflow, il vous est demandé de marquer une réponse comme la bonne réponse une fois que vous en avez trouvé une qui fonctionne pour vous. Sous la section de vote pour chaque réponse, il devrait y avoir un aperçu d'une coche que vous pouvez utiliser pour accepter une réponse. –

1

dans ce cas ptr est un int* pas un pointeur vers un vector<int> donc il ne peut pas effectuer d'opérations vectorielles. Lorsque vous effectuez la mission:

ptr = &v[0]; 

vous affectez le pointeur à l'adresse contenant l'entier à v [0], ne pas attribuer une référence au vecteur. Pour faire ce que vous voulez, vous devez effectuer les opérations suivantes:

int num; 
vector<int> v; 
vector<int>* ptr; 

ptr = &v; 

ptr->push_back(num); 
4

Vous comprenez mal ce vector::pointer est. C'est un type pour un pointeur vers un élément du vecteur, pas un pointeur vers un vecteur lui-même. Cela dit, il n'est pas clair pour moi pourquoi vous voudriez faire cela puisque la notation . fonctionne très bien et vous évite le déréférencement du pointeur sur chaque accès. Si vous vous trouvez en tapant vector<int> *vecPtr = new vector<int>;, prenez une grande respiration et demandez pourquoi vous ne pouvez pas utiliser RAII.

Questions connexes