2017-10-09 95 views
-2

我有一个存储内部列表的顶部列表。我正在使用标准模板库列表模板。打印列表的列表C++ STL列表

我正在尝试打印内部列表的值。 顶部列表是“L”,内部列表是“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; 
    } 
} 

我的IDE不喜欢行cout << *it << " ";,我真的不知道如何同时具有程序做什么,我希望它做的,这是打印列表中的数据进行更改。 它红色强调了“< <“运营商和说“不操作“< <‘匹配这些操作数。’

有人可以帮助我,为什么?我看了,并不能真正找到我要找的东西。我没有正确理解某件事。我知道它正在将数据正确地添加到数据结构中,因为我的IDE使我能够查看我的本地人。

感谢任何人的帮助!意义重大。

+4

它试图打印一个'IntObj'你有没有添加到代码来做到这一点? –

+1

你说你有一个存储列表的列表,但这不是你所拥有的列表。您有两个不相关的列表,您出于某种原因尝试使用嵌套循环输出。另外,请澄清“我的IDE不喜欢”并创建[mcve]谢谢。 – Rakete1111

+0

我不喜欢菠菜,你的IDE不喜欢你的代码行。这就是我们都有我们的怪癖。 –

回答

0

尝试使用:

list<IntObj>::const_iterator i; 

,而不是你使用的是一个以避免编译错误。

0

内循环没有意义。

如果你想使用迭代器则函数可以像

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; 
    } 
} 

被定义然而,它会更简单,以使用基于范围的for循环。例如

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

考虑到,你必须定义operator <<该类IntObj帐户。 它的声明应该看起来像

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

我可以在IntObj类之外为IntObj定义ostream运算符吗?我无法编辑IntObj文件。谢谢弗拉德。 –

+0

@AliciaSabatino你可以在类中定义它,在这种情况下,将使用ADL查找。如果运营商直接访问该类别的私人数据成员,则必须将该运营商声明为朋友。 –

+0

好的。所以说这个值存储在IntObj中的m_data中......我会在重载函数中写入cout << m_data吗? –