Iterator vectoriel STL C ++ accédant aux membres d'un objet
Je pense que j'ai déclaré un Vecteur avec un objet correctement. Mais, je ne sais pas comment faire pour accéder à ses membres lors de la boucle avec Itérateur.
Dans mon code, la ligne --->> cout << "" << *Iter;
Comment puis-je imprimer le contenu de la membres? Comme *Iter.m_PackLine ???
Ne sais pas si j'ai utilisé les bons termes, mais apprécie l'aide! Grâce
class CFileInfo
{
public:
std::string m_PackLine;
std::string m_FileDateTime;
int m_NumDownloads;
};
void main()
{
CFileInfo packInfo;
vector<CFileInfo, CFileInfo&> unsortedFiles;
vector<CFileInfo, CFileInfo&>::iterator Iter;
packInfo.m_PackLine = "Sample Line 1";
packInfo.m_FileDateTime = "06/22/2008 04:34";
packInfo.m_NumDownloads = 0;
unsortedFiles.push_back(packInfo);
packInfo.m_PackLine = "Sample Line 2";
packInfo.m_FileDateTime = "12/05/2007 14:54";
packInfo.m_NumDownloads = 1;
unsortedFiles.push_back(packInfo);
for (Iter = unsortedFiles.begin(); Iter != unsortedFiles.end(); Iter++ )
{
cout << " " << *Iter; //!!! THIS IS WHERE I GET STUMPED
//How do I output values of the object members?
}
} //end main
source d'informationauteur richyz | 2008-11-26
Vous devez vous connecter pour publier un commentaire.
ne fonctionnera que si
CFileInfo
a une surchargeoperator<<
qui peut à la sortie de votre structure. Vous pouvez générer des membres individuels de la structure à la place comme ceci:Sinon, la suite est équivalente à:
Vous devez mettre des parenthèses autour de *Iter, depuis les états-opérateur d'accès lie thighter autrement.
Sur un côté-nœud, vos principaux de retour de la fonction int au lieu de void. faisant retour void n'est pas valide en C++.
Vous déclarez le vecteur comme ceci:
Le deuxième argument de
vector
doit être autre chose. Il n'est pas nécessaire pour votre code pour donner le vecteur d'une deuxième argument. Il suffit d'utiliser cette:Autre chose que j'ai remarqué, c'est que vous incrémenter la variable d'itération à l'aide de
Iter++
(appelépostfix increment
). Pour les itérateurs, préférez toujours++Iter
qui est appeléprefix increment
.Utilisation (*iter).membre ou iter->membres.
Vous pouvez également utiliser temporaires:
Aussi, pour ce que vous faites, vous voudrez probablement un const_iterator au lieu d'une (mutable) itérateur.
En outre, std::vector est un modèle de l'acceptation d'un nom et d'un allocateur, pas deux typenames. Vous pouvez utiliser la valeur par défaut de l'allocateur par le décapage de la deuxième argument de modèle:
Certains tatillon:
C'est le premier problème que j'ai remarqué:
std::vector
est un modèle.Vous avez:
vous besoin de quelque chose comme:
Maintenant que j'y pense, votre définition du modèle peut avoir tout juste d'avoir analysé par le stackoverflow système de commentaire.
ou
Premier corriger vous r'vecteur de déclaration:
Ensuite, vous devez définir un opérateur de sortie pour votre classe:
Habituellement, vous pouvez soit faire de l'opérateur de sortie d'un ami de votre classe ou de fournir une méthode d'impression qui prend un ruisseau. De toute façon vous pouvez ensuite accéder à les membres et de les diffuser manuellement à la sortie.
Une fois que vous avez la sortie itérateur défini, vous pouvez modifier votre boucle d'utiliser la bibliothèque standard versions:
Merci à tous, souhaite que je pourrais accorder de multiples points pour les réponses 🙂
litb également souligné un problème que j'ai dans ma déclaration du vecteur. J'ai supprimé le deuxième argument du vecteur déclaration et cela a fonctionné.
Stackoverflow analysé certains de mon code, je vais être plus attentif à la publication prochaine fois.
vector<CFileInfo, CFileInfo&
> ne fonctionnera pas du tout. Le deuxième paramètre de vecteur est l'allocateur le vecteur utilise, etCFileInfo
ne pas répondre à ces exigences, ni n'importe quel type de référence. Je pense que vous voulez justevector<CFileInfo>
les itérateurs et les membres seront de retourCFileInfo&
automatiquement.