我有一个存储内部列表的顶级列表。我正在使用标准模板库列表模板。
我正在尝试打印内部列表的值。 顶部列表为“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使我能够查看我的本地人。
感谢任何帮助过的人!意义重大。
答案 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 & );