【问题标题】:C++ list in list列表中的 C++ 列表
【发布时间】:2015-07-28 07:04:57
【问题描述】:

我有两个列表

list<int> s;
list<std::list<int>> q;

我做了以下任务

q.push_front(s);

我怎样才能显示q的内容,因为这个

for (q_iterator = q.begin(); q_iterator != q.end(); ++q_iterator)
    for (s_iterator = q_iterator.begin(); s_iterator != q_iterator.end(); ++s_iterator)
        cout << *s_iterator;

给我一​​个错误?

【问题讨论】:

  • q_iterator-&gt;begin();a.s.o.
  • 这里的错误对于有经验的开发人员来说可能很明显,但总的来说这个问题不符合标准,因为它没有包含足够的信息(错误消息!)。顺便说一句,请注意,您可以使用 flattening iterator 概括此类访问

标签: c++ list iteration


【解决方案1】:

你要这样写

for (q_iterator = q.begin(); q_iterator != q.end(); ++q_iterator)
    for (s_iterator = q_iterator->begin(); s_iterator != q_iterator->end(); ++s_iterator)
        cout << *s_iterator;

或以下方式

for (q_iterator = q.begin(); q_iterator != q.end(); ++q_iterator)
    for (s_iterator = ( *q_iterator ).begin(); s_iterator != ( *q_iterator ).end(); ++s_iterator)
        cout << *s_iterator;

前提是 q_iterators_iterator 已经声明。否则你可以写例如

for ( auto q_iterator = q.begin; /*...*/ )

您也可以使用基于范围的 for 语句。例如

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

【讨论】:

    【解决方案2】:

    你可能知道,但我只是想确保你记得尖括号之间的空格。

    std::list&lt;std::list&lt;int&gt; &gt;

    【讨论】:

    • 哦,很高兴知道。谢谢。尽管使用了 C++11,但我仍然关心它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多