2010-09-06 5 views
0

J'ai essayé avec ce morceau de code, mais cela n'a pas fonctionnéPour écrire une fonction qui imprime chaque élément d'un vecteur STL malgré le type

template <class T> 
void display(vector<T> vec) 
{ 
    vector<T>::iterator MyIter; 
    for(MyIter=vec.begin();MyIter!=vec.end();MyIter++) 
    cout<<*MyIter<<" "; 
    cout<<endl; 
} 

Je veux dire que s'il y a un moyen d'éviter de faire une fonction pour chaque type T (int, char, string). J'utilise seulement les types de T. builtin

Ceci est le message d'erreur lorsque je compile le programme

10 C:\Documents and Settings\ASPIRE\Desktop\perms.cpp expected `;' before "MyIter" 

Répondre

0

Pouvez-vous être plus clair sur la façon dont ce code ne fonctionne pas?

Il repose sur l'existence de l'opérateur T :: < < - si ce n'est pas le cas pour tout type d'instanciation/classe T que vous utilisez dans votre code, le code ne compilera pas. Pour les types intégrés, ce code fonctionnerait correctement. Si vous utilisez ceci pour le vecteur de vos propres types alors vous devez implémenter l'opérateur < < pour chacun pour que cela fonctionne.

btw utiliser ++MyIter, c'est plus efficace.

+0

pourquoi est ++ Myiter plus efficace? – rfrm

+0

Parce que l'autre formulaire doit faire un appel de constructeur de copie supplémentaire afin de renvoyer la valeur correcte. Vérifiez les déclarations d'incrément de préfixe et de suffixe dans votre fichier d'en-tête . Voir aussi la réponse de duffymo ici: http://stackoverflow.com/questions/1812990/incrementing-in-c-when-to-use-x-or-x –

+0

btw, passer le vecteur en valeur est cher. Utilisez plutôt 'const vector & vec'. –

2

Il vous manque le typename de la définition Infront variables MyIter à-dire qu'elle doit être typename vector<T>::iterator MyIter;