2017-06-28 5 views
0

Ich versuche, eine Liste von Sätzen zu drucken, aber ich bin mit der Syntax verwirrt. Ich möchte, dass jeder Satz in einer neuen Zeile steht. Hier ist mein Code:C++ Drucken einer Liste von Sets

set<int> set1 = { 2, 4, 5 }; 
set<int> set2 = { 4, 5 }; 

list<set<int>> list1; 
list<set<int>>::iterator it = list1.begin(); 

list1.insert(it, set1); 
list1.insert(it, set2); 

cout << "List contents:" << endl; 
for (it = list1.begin(); it != list1.end(); ++it) 
{ 
    cout << *it; //error is here 
} 

Ich erhalte einen Fehler beim Versuch, den Zeiger auf den Iterator zu drucken. Ziemlich sicher ist es, weil ich einen Satz innerhalb der Liste verwende, aber ich kenne nicht die richtige Syntax für die Ausgabe dieser Liste.

+0

Was ist der Fehler, und wie möchten Sie das Set gedruckt ? – Ryan

+0

@Ryan kein Operator entspricht diesen Operanden std :: set , std :: allokator >, wie ich sagte, ich möchte jeder Satz in einer neuen Zeile ausgedruckt werden und jedes Set-Element durch ein getrennt Platz – Daoud

Antwort

3

Möchten Sie wie folgt drucken?

for (it = list1.begin(); it != list1.end(); ++it) 
    { 
     for (set<int>::iterator s = it->begin(); s != it->end(); s++) {               
      cout << *s << ' '; 
     } 
     cout << endl; 
    } 

Ausgang:

List contents: 
2 4 5 
4 5 
+0

perfekt, danke! – Daoud

1

Es gibt keine für std::set Überlastung von operator << ist, müssen Sie die Schleife selbst (und möglicherweise eine Funktion für das Erstellen)

, Mit der für Bereich schreiben Sie kann einfach tun:

for (const auto& s : list1) { 
    for (int i : s) { 
     std::cout << i << ' '; 
    } 
    std::cout << std::endl; 
} 
Verwandte Themen