2016-11-28 15 views

答えて

9

まず、錆は要素を追加するための保証レイテンシのいずれかのライブラリが(標準ライブラリに)提供していません最悪の場合。

  • スタックはVecの上又はLinkedListいずれかで実装することができる(いずれもpop_backpush_backが備わり)
  • キューのいずれかに実装されてもよい:言われ、それぞれの場合のための2つの候補が存在すること

    VecDeque又はLinkedListの上に(両方の機能pop_frontpush_back

差分Vec*LinkedListの間には、後者が単純であることがあります。push_backを呼び出すたびにメモリが割り当てられます。一方で、これは、push_backのコストが既にコレクション内の要素の数とは無関係であることを意味するため、これは素晴らしいことです。一方で、メモリ割り当てには本当に時間がかかることがあります。

前者は少し複雑です:

  • それはより多くのキャッシュフレンドリー
  • さのおかげで、それは限り余分な容量があるように、非割り当てpush_backを保証し、追加の容量を持ち、優れたスループットを持っています
  • それはまだは前もって
余剰能力を確保いない場合でも、 O(1) push_backを償却維持

一般的には、スタックにはVec、キューにはVecDequeを使用することをお勧めします。

7

両方VecDequeLinkedListpush/pop _ front/backを持っています。錆のコレクションに新しい要素を追加する際、一般的にメモリを割り当てることができ、メモリを割り当てることは、時間の無制限の量を取ることがあります。

+1

おかげさまで、私は魔法のキーワード 'FIFO'と' LIFO'を検索し、何も重要なものはありませんでした。たぶんそれはドキュメンテーションの問題です。 – Boiethios

+0

std :: Vecがスタックに適しているのを見ましたが、キューの方が効率的です。 – Boiethios

+0

あなたのユースケースによって異なります。私は 'LinkedList'がより予測可能だと思いますが、' VecDeque'はある意味でより効率的ですが、本当にあなた自身でそれを測定する必要があります。 –

関連する問題