2016-09-17 38 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