2017-10-09 8 views
-2

J'ai une liste supérieure qui stocke les listes internes. J'utilise le modèle de liste de bibliothèque de modèles standard.Impression d'une liste de listes Liste STL C++

Je tente d'imprimer les valeurs des listes internes. La liste du haut est "L" et la liste interne est "I".

void ListofLists::dump() 
{ 
    list<list<IntObj>>::iterator itr; 
    for (itr = L.begin(); itr != L.end(); itr++) 
    { 
     list<IntObj>::iterator it; 
     for (it = I.begin(); it != I.end(); it++) 
     { 
      cout << *it << " "; 
     } 
     cout << endl << "End" << endl; 
    } 
} 

Mon IDE n'aime pas la ligne cout << *it << " "; et je ne suis pas vraiment sûr de savoir comment changer tout en ayant le programme faire ce que je veux faire, ce qui est d'imprimer les données à l'intérieur des listes. Il rouge souligné l'opérateur « < < » et dit « aucun opérateur « < < « correspond à ces opérandes. »

quelqu'un peut me aider à pourquoi? J'ai regardé et ne peux pas vraiment trouver ce que je cherche. Je ne comprends pas quelque chose correctement. Je sais qu'il ajoute correctement les données à la structure de données car mon IDE me permet de voir mes locaux.

Merci à tous ceux qui aident! Signifie beaucoup.

+4

Vous tentez d'imprimer un 'IntObj' que vous avez ajouté au code pour cela? –

+1

Vous dites que vous avez une liste qui stocke des listes, mais ce n'est pas ce que vous avez. Vous avez deux listes non liées, que vous essayez de sortir en utilisant une boucle imbriquée pour une raison quelconque. Aussi, s'il vous plaît, clarifiez "Mon IDE n'aime pas" et créez un [mcve] merci. – Rakete1111

+0

Je n'aime pas les épinards, votre IDE n'aime pas votre ligne de code. Voilà comment nous avons tous nos bizarreries. –

Répondre

0

Essayez d'utiliser:

list<IntObj>::const_iterator i; 

à la place celui que vous utilisez pour éviter la compilation erreur.

0

La boucle interne n'a pas de sens.

Si vous souhaitez utiliser itérateurs alors la fonction peut être définie comme

void ListofLists::dump() /* const */ 
{ 
    for (list<list<IntObj>>::iterator itr = L.begin(); itr != L.end(); itr++) 
    { 
     for (list<IntObj>::iterator it = itr->begin(); it != itr->end(); it++) 
     { 
      cout << *it << " "; 
     } 
     cout << endl << "End" << endl; 
    } 
} 

Cependant, il sera plus simple d'utiliser la base gamme pour la boucle. Par exemple

void ListofLists::dump() /* const */ 
{ 
    for (const auto &inner_list : L) 
    { 
     for (const auto &item : inner_list) 
     { 
      cout << item << " "; 
     } 
     cout << endl << "End" << endl; 
    } 
} 

Prenez en compte que vous devez définir la operator << pour la classe IntObj. Sa déclaration devrait ressembler à

std::ostream & operator <<(std::ostream &, const IntObj &); 
+0

Puis-je définir l'opérateur ostream pour IntObj en dehors de la classe IntObj? Je suis incapable d'éditer les fichiers IntObj. Merci vlad. –

+0

@AliciaSabatino Vous pouvez le définir à l'intérieur de la classe, dans ce cas la recherche ADL sera utilisée. Si l'opérateur accède directement aux données privées de la classe, l'opérateur doit être déclaré comme ami. –

+0

Okay. donc disons que la valeur est stockée dans m_data dans le IntObj ... est-ce que j'écrirais simplement cout << m_data dans la fonction surchargée? –