[解決済み] Rustにはキューとスタックコレクションがありますか?
2022-02-08 10:41:53
質問
FIFOコレクションやLIFOコレクションが必要な場合(基本的に
push
,
pop
と
front
/
back
) Rustでは何を使うべきでしょうか?例えば
std::queue
または
std::stack
をC++で作成します。
どのように解決するのですか?
まず第一に、Rustは、(標準ライブラリでは)以下のようなレイテンシが保証されたライブラリを提供していません。 追加 要素で構成されています。Rustコレクションは一般に、新しい要素を追加する際にメモリを割り当てることがあり、メモリの割り当てには最悪の場合、無限の時間がかかる可能性があります。
とはいえ、それぞれのケースで2つの候補があります。
-
スタックは
Vec
またはLinkedList
(どちらも機能pop_back
とpush_back
) -
の上に実装することができます。
VecDeque
またはLinkedList
(どちらも機能pop_front
とpush_back
)
との違いは
Vec*
と
LinkedList
の各呼び出しに対して、後者が単純化されていることです。
push_back
を使用すると、メモリの割り当てが行われます。一方では、これは
push_back
はコレクション内の要素数に依存しませんが、一方で......メモリの割り当てには本当に長い時間がかかるかもしれません。
前者は少し複雑です。
- よりキャッシュに優しいため、スループットが向上します。
-
追加容量があり、非割り当てを保証します。
push_back
余力がある限り -
を維持しています。
アモルファス
O(1)
push_back
余剰生産能力を事前に予約していない場合でも
一般的には、以下のように使用することをお勧めします。
Vec
をスタックに、そして
VecDeque
はキューです。
関連
-
[解決済み] rustupでインストールしたRustをアンインストールするには?
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み】ある値とその値への参照を同じ構造体に格納できないのはなぜですか?
-
[解決済み】ライブラリとバイナリの両方を持つRustパッケージ?
-
[解決済み】Rustの実行ファイルはなぜこんなに巨大なのですか?
-
[解決済み】Rust 1.xでファイルを読み書きするデファクトの方法は?
-
[解決済み] Iterator(またはその他の trait)を返す正しい方法は何ですか?
-
[解決済み] ローカルの未公開クレートを使うには?
-
[解決済み] Rust構造体の変数を初期化する、より速い/より短い方法はありますか?
-
[解決済み] カスタムステップで範囲を反復処理するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] rustupでインストールしたRustをアンインストールするには?
-
[解決済み】ライブラリとバイナリの両方を持つRustパッケージ?
-
[解決済み】RustプログラムがCargoパッケージからメタデータにアクセスする方法は?
-
[解決済み] CopyとCloneの違いは何ですか?
-
[解決済み] バイトのベクター(u8)を文字列に変換するには?
-
[解決済み] クロージャがFn、FnMut、FnOnceを実装するのはどんなとき?
-
[解決済み] Cargoで複数のバイナリをビルドするにはどうしたらいいですか?
-
[解決済み] Rust の 128 ビット整数 `i128` は 64 ビットシステムでどのように動作するのでしょうか?
-
[解決済み] ローカルの未公開クレートを使うには?
-
[解決済み】iterとinto_iterの違いは何ですか?