2016-09-17 221 views
0

我想使用STL创建栈对象的链表。这是我的代码看起来像:C++ - 嵌套容器(栈容器的列表容器)

int main() { 
    stack<int> s1; 
    list<stack<int>> ll; 
    s1.push(0) 
    ll.push_back(s1); 
    auto it = ll.begin(); 
    it++; 
    cout << *it->top() << endl; 
    return 0; 
} 

我得到的错误是非法的间接和“< <”非法的第二最后一行类。什么似乎是这个问题?谢谢。

+1

你在第四行缺少一个分号,第8行应该是 - > top(),而你试图访问列表的末尾。 –

+0

对不起,我只是添加了一个复杂版本的基本代码(实际上使用for循环迭代了多个堆栈的列表),所以忘记了适当地更改 – ExtremistEnigma

回答

0

您希望您的线路如下:

cout << (*it).top() << endl; 

你是不是提领的指针值的值。请注意,我将->更改为. 螺栓和螺栓是'它'基本上是指向您的值的指针,'* it'为您提供了值,因此当您要访问该值的成员时,您需要使用.的一个->

更新:另外,正如其他人指出的,有一个失踪;在推动之后,你只添加了一个项目到列表中,然后增加了你的迭代器,它将你放在列表的最后,在一个值之后。这会导致你遇到时间问题。

+1

和“cout << it-> top()”也是有效的语法。即使语法是正确的,但第二行将导致分段错误,因为您正在访问超出范围的迭代器。 – bits

+0

是的,的确如此。我没有把这些放在我的回答中,因为那不是问题的一部分。我会更新我的答案。 – hvanbrug

+1

这个解决方案非常有意义!我试图做* it.top(),但(* it).top()肯定更有意义。关于其他错误:对此我很抱歉,我只是添加了一个非常复杂的版本的基本代码(实际上是使用for循环遍历列表中的多个堆栈),所以忘记进行适当的更改 – ExtremistEnigma