打印列表C ++ STL列表

时间:2017-10-09 19:10:07

标签: c++ list stl cout

我有一个存储内部列表的顶级列表。我正在使用标准模板库列表模板。

我正在尝试打印内部列表的值。 顶部列表为“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 << " ";,我不确定如何在程序执行我想要的操作时更改它,这会打印列表中的数据。 红色加下划线“&lt;&lt;&lt;”操作符并说“无操作符”&lt;&lt;“匹配这些操作数。”

有人可以帮我解释原因吗?我看起来并不能真正找到我正在寻找的东西。我不是正确理解的东西。我知道它正在正确地将数据添加到数据结构中,因为我的IDE使我能够查看我的本地人。

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

2 个答案:

答案 0 :(得分:0)

尝试使用:

list<IntObj>::const_iterator i;

而不是你用来避免编译错误的那个。

答案 1 :(得分: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 & );