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

4行目にセミコロンがありません.8行目では、it-> top()であり、リストの最後を過ぎてアクセスしようとしています。 –

+0

これについて申し訳ありません、私はちょっと複雑なバージョンの基本コードを追加しました(forループを使って実際に複数のスタックを持つリストを反復していました)ので、変更を適切に行うのを忘れました – ExtremistEnigma

答えて

0

は、次のようにあなたのラインが読みたい:

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

あなたは値へのポインタの代わりに値を参照解除されました。私が->. に変更したことに注目してください。ナッツとボルトは本質的にあなたの値へのポインタであり、 '* it'は値を与えます。その値のメンバーにアクセスする場合は.->

更新:他にも指摘されているように、欠落があります。プッシュ後、リストに1つの項目を追加した後、リストの最後に1つの値の後ろに位置するイテレータをインクリメントします。これにより、実行時に問題が発生します。

+1

と "cout << it-> top有効な構文でもあります。構文が正しくても、2番目の最後の行は、範囲外のイテレータにアクセスしているため、セグメンテーション違反を引き起こします。 – bits

+0

はい、そうです。それは質問の一部ではなかったので、私はそれを私の答えに入れなかった。私は私の答えを更新します。 – hvanbrug

+1

このソリューションは理にかなっています!私は* it.top()をしようとしていましたが、(* it).top()は間違いなく理にかなっています。他のエラーについて:残念ですが、私はちょっと複雑なバージョンの基本コードを追加しました(実際にはforループを使って複数のスタックを持つリストを反復していました)ので、変更を適切に行うのを忘れました – ExtremistEnigma

関連する問題