C ++打印集合列表

时间:2017-06-28 04:48:28

标签: c++ list iterator set

我正在尝试打印出一组集合,但我对语法感到困惑。我希望每一套都在新的一条线上。这是我的代码:

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
}

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

operator <<没有std::set的重载,你必须自己编写循环(并可能为此创建一个函数)

对于范围,您可以这样做:

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