FIFOまたはLIFOコレクション(基本的にはpush
、pop
、front
/back
)が必要な場合、Rustではどうすればよいですか? C++のstd::queue
やstd::stack
のようなもの。キューとスタックのコレクションはありますか?
6
A
答えて
9
まず、錆はが要素を追加するための保証レイテンシのいずれかのライブラリが(標準ライブラリに)提供していません最悪の場合。
- スタックは
Vec
の上又はLinkedList
いずれかで実装することができる(いずれもpop_back
とpush_back
が備わり) - キューのいずれかに実装されてもよい:言われ、それぞれの場合のための2つの候補が存在すること
VecDeque
又はLinkedList
の上に(両方の機能pop_front
とpush_back
)
差分Vec*
とLinkedList
の間には、後者が単純であることがあります。push_back
を呼び出すたびにメモリが割り当てられます。一方で、これは、push_back
のコストが既にコレクション内の要素の数とは無関係であることを意味するため、これは素晴らしいことです。一方で、メモリ割り当てには本当に時間がかかることがあります。
前者は少し複雑です:
- それはより多くのキャッシュフレンドリー
- さのおかげで、それは限り余分な容量があるように、非割り当て
push_back
を保証し、追加の容量を持ち、優れたスループットを持っています - それはまだは前もって
push_back
を償却維持
一般的には、スタックにはVec
、キューにはVecDeque
を使用することをお勧めします。
7
両方VecDeque
とLinkedList
はpush
/pop
_ front
/back
を持っています。錆のコレクションに新しい要素を追加する際、一般的にメモリを割り当てることができ、メモリを割り当てることは、時間の無制限の量を取ることがあります。
関連する問題
- 1. C++:スタックとキュー
- 2. キュー内の再帰/スタックとキュー
- 3. アレイベースのリストベースのスタックとキュー
- 4. SQLジョブのキューはありますか?
- 5. キュー内のスタックで.peek()を使用しないことを推奨する理由はありますか?
- 6. スタックを作り直してスタックFIFOを取り消すキューを実装しようとしていますか?
- 7. JavaScriptスタック、キュー、イベントループ?
- 8. jQueryイベントチェーン - スタックからキューへ
- 9. キャッピングされたコレクションとキュー
- 10. スタックは1種類のキューです
- 11. コレクションにはJavaScriptがありますか?
- 12. インジックスの表記法、スタックとキュー
- 13. Chain of Responsibilityとキューまたはスタック内のコマンド
- 14. 平均スタックにはアプリケーションサーバーとWebサーバーがありますか?
- 15. スタック、キューの無効化
- 16. キュー&スタックを表示するには?
- 17. なぜスタックとキューを実装するのですかjava
- 18. Python MemoryError(キューとスレッディングあり)
- 19. スタックまたはキューのリテラルイニシャライザを指定する方法は?
- 20. キューはテンプレートではありません
- 21. Laravel Lumen Queueキューとの障害:キューではありません:listen
- 22. データをJavaのスタックとキューに格納する方法は?
- 23. スタックはCPUまたはRAMにありますか?
- 24. 共有はWebForms .netのキューにありますか?
- 25. Cでは、ソケットの場合、recvmsg()にキューがありますか?
- 26. コレクションにJavaのイテレータが複数あることはありますか?
- 27. なぜスタックとヒープがありますか?
- 28. 各スレッドには独自のスタックがありますか?
- 29. ELKスタック用のオープンソースアラートおよびレポートプラグインはありますか?
- 30. Javaでスタックとキューを実装する方法は?
おかげさまで、私は魔法のキーワード 'FIFO'と' LIFO'を検索し、何も重要なものはありませんでした。たぶんそれはドキュメンテーションの問題です。 – Boiethios
std :: Vecがスタックに適しているのを見ましたが、キューの方が効率的です。 – Boiethios
あなたのユースケースによって異なります。私は 'LinkedList'がより予測可能だと思いますが、' VecDeque'はある意味でより効率的ですが、本当にあなた自身でそれを測定する必要があります。 –