2017-06-28 124 views
0

我试图打印出一组列表,但我混淆了语法。我希望每一集都在一个新的线上。这里是我的代码:C++打印一组列表

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 
} 

我试图打印指针到迭代器时出现错误。很确定,因为我在列表中使用了一个集合,但是我不知道输出这个列表的正确语法。

+0

什么是错误,你想如何设置打印? – Ryan

+0

@Ryan没有运算符匹配这些操作数std :: set ,std :: allocator >,正如我所说我希望每个集合都打印在一个新行上并且每个set元素由一个太空 – Daoud

回答

3

是否要打印如下?

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

输出:

List contents: 
2 4 5 
4 5 
+0

完美,谢谢! – Daoud

1

没有为std::set没有operator <<超载,你必须自己写循环(也可能是创建一个功能)

随着范围,你可能只是:

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