問題タブ [deque]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
3013 参照

c++ - std::deque メモリ使用量 - Visual C++、および他との比較

std::deque のメモリ オーバーヘッドで一体何が起こっているのかをフォローアップしてください。

Visual C++ はdeque、これを使用してコンテナー要素の型に従ってブロックを管理します。

これにより、小さな要素のメモリ フットプリントが非常に大きくなります。最初の行の 16 を 128 に変更することで、大きなdeque<char>. プロセス エクスプローラーのプライベート バイトが 181MB から 100m のpush_back(const char& mychar)呼び出し後に 113MB に減少しました)。

  • その値を正当化できる人はい#defineますか?
  • deque他のコンパイラはブロックのサイズをどのように処理しますか?
  • push_backへの 100m呼び出し の単純なテストのフットプリント (32 ビット操作) はどうなるでしょうdeque<char>か?
  • STL では、 <deque>コードを変更せずに、コンパイル時にこのブロック サイズをオーバーライドできますか?
0 投票する
3 に答える
1988 参照

python - この Python データ構造を知っている人はいますか?

Python クラスには、次に示す 6 つの要件があります。太字の用語のみが要件として読み取られます。


  1. 次の 4 つの操作の多くで、O(1)に近いパフォーマンス。
  2. オブジェクトをコンテナに挿入する際にソート順を維持します。
  3. オブジェクトに含まれる最後の値 (最大値)を覗く機能。
  4. 両側でポップを許可します(最小値または最大値を取得します)。
  5. 格納されているオブジェクトの合計サイズまたは数を取得する機能。
  6. Pythonの標準ライブラリのコードのような既製のソリューションであること。

以下は、歴史的な理由からここに残されています (好奇心を助け、研究が行われたことを証明します)。


Python の標準ライブラリ (具体的にはデータ型に関するセクション) を調べた後でも、断片化テーブルの要件要件を満たすクラスをまだ見つけていません。collections.deque必要なものに近いですが、それに含まれるデータをソートしたままにすることはサポートされていません。以下を提供します。

  1. O(1) パフォーマンスで両端キューの両側に効率的に追加およびポップします。
  2. オブジェクト内に含まれるデータの両側でポップします。
  3. 内部に含まれるオブジェクトの合計サイズまたは数を取得します。

リストを使用して非効率的なソリューションを実装するのは些細なことですが、適切に機能するクラスを見つけることははるかに望ましいことです。上限のない増大するメモリ シミュレーションでは、このようなクラスは、空の (削除された) セルのインデックスを保持し、断片化レベルを低く抑えることができます。bisectモジュールが役立つ場合があります。

  1. 配列に新しいオブジェクトを挿入する際に、配列をソート順に保つのに役立ちます。
  2. オブジェクトが追加されたときにリストをソートしておくための既製のソリューション。
  3. 実行すると、配列内の最後の値array[-1]を覗くことができます。

要件を完全に満たすことができず、最も見込みがないと思われる最終候補はheapqモジュールでした。効率的な挿入のように見えるものをサポートし、それarray[0]が最小値であることを保証する一方で、配列は常に完全にソートされた状態にあるとは限りません。これほど役立つものは他にありませんでした。


これらの 6 つの要件に近いPython のクラスまたはデータ構造を知っている人はいますか?

0 投票する
3 に答える
19940 参照

c++ - std::deque または std::priority_queue スレッドセーフを使用していますか?

重複の可能性:
C++ STL std::set はスレッドセーフですか?
STL キューのスレッド セーフ

そうではないと思いますが、確認したいだけです。orを同時に使用して同じstd::deque を使用する 2 つのスレッドを意味します。std::deque::push_backpush_front

std::priority_queue関数std::priority_queue::pushstd::priority_queue::pop..についても同じ質問があります。

それらのコンテナーはスレッドセーフですか? または、スレッドセーフになるように個人的にプログラムする必要がありますか?

Tnxたくさん。

0 投票する
2 に答える
8804 参照

iphone - UITableView からの再利用可能なセルのデキュー

このコードが正常に機能する理由:

cell.textLabel.text = ...セル識別子を理解している限り、このコードはif ステートメントから行を移動した場合にのみ正しく機能するはずです。言い換えれば、ラベルのテキストが正しいのはなぜですか???

0 投票する
4 に答える
2914 参照

c++ - 消去を呼び出すときのSTLイテレータの無効化に関する問題

STL標準では、std :: deque、std :: listなどのコンテナで消去が発生すると、イテレータが無効になると定義されています。

私の質問は次のとおりです。std::dequeに含まれる整数のリストと、std :: dequeの要素の範囲を示すインデックスのペアを想定すると、すべての偶数要素を削除する正しい方法は何ですか?

これまでのところ、次のことがありますが、ここでの問題は、消去後に想定される終了が無効になることです。

std :: remove_ifがどのように実装されているかを調べると、非常にコストのかかるコピー/シフトダウンプロセスが進行しているようです。

  • すべてのコピー/シフトなしで上記を達成するためのより効率的な方法はありますか?

  • 一般に、要素を削除/消去することは、シーケンス内の次のn番目の値と交換するよりもコストがかかります(nはこれまでに削除/削除された要素の数です)

注:回答では、シーケンスサイズが非常に大きく、+ 1mil要素であり、平均して要素の1/3が消去可能であると想定する必要があります。

0 投票する
1 に答える
1491 参照

c++ - ベクトルポインタの両端キューを初期化します

私の要件は、MD 型の 500 個のオブジェクトをベクターに格納することであり、これらのベクターへのポインターを deque に保持しています。ここでの問題は、コピー コンストラクター MDataContainer(const MDataContainer &mDataCont) でこのリストを初期化し、それをオーバーロードされた代入演算子 MDataContainer& operator=(const MDataContainer &mDataCont) に割り当てる方法です。コードの重複をなくすために、Init 関数を使用しています。Plsは、パフォーマンスを向上させる方法を説明してくれます。私がすでに使用している大まかな方法​​。この種の問題を解決するために使用できるアルゴリズムまたは他のライブラリ(ブースト、gr8のアイデアはありません)を使用できますか。

0 投票する
2 に答える
351 参照

c++ - 多数のアイテムの両端キューのようなものですが、少数のアイテムのメモリ使用量は少ないですか?

特定のタイプのオブジェクトがたくさんあり、それぞれが同じタイプの他のオブジェクトを保持するために両端キューを割り当てる場合があります。両端で高速アクセスが必要であり、特定のオブジェクトが他の多くのオブジェクトを参照する可能性があるため、両端キューを使用しています。

ただし、オブジェクトの多くまたはほとんどが他のオブジェクトをほとんど参照していない場合があります。この場合、dequeのメモリ使用量はかなり大きくなります。私が使用している実装は、最初のpush_back()を実行するとすぐに、一度に4096バイトを割り当てます。dequeの各要素はわずか8バイトです。これは、特に私がこれらのオブジェクトの多くを作成しているため、したがってこれらの両端キューの多くを作成しているため、非常に多くの無駄なスペースです。

同時に、ほとんどのオブジェクトが他のオブジェクトをほとんど参照していないにもかかわらず、特定のオブジェクトは実際には他の多くのオブジェクトを参照できるため、deque(またはそのようなもの)が必要です。

私の最初の考えは、capacity()とreserve()を使用してdequeを自分で拡張することでしたが、コンパイラーから、dequeにはそのような関数がないことが通知されました。

したがって、おそらく、16個の要素が存在するまでベクトルが使用され、その後、ベクトルが破棄されて両端キューが使用される、ベクトルと両端キューの基礎となる両端キューのようなインターフェイスを持つクラスを作成することを考えていました。そこから。

ベクトルは要素の数が少ない場合にのみ使用されるため、push_front()とpop_front()が速度の点で非効率になることはそれほど重要ではありません。また、ベクトルを次のように制御できるためです。 capacity()とreserve()の場合、より多くの要素が存在するときにdequeが大量のメモリを使用することはそれほど重要ではありません。

しかし、このように自分のクラスをロールする前に、このようなものがすでに存在するかどうかを確認したかったのです。また、このようなことが悪い考えである理由を誰かが知っている場合、または誰かが関連する提案を持っている場合は、それを聞いてみたいです。

前もって感謝します。

0 投票する
1 に答える
126 参照

c++ - deques を使用しないとプログラムが遅くなりますか?

だから私はこのdequeを持っています

そして、使用して要素を追加するだけです

そして、それらを使用して消去します

使用するa[1001]とうまく機能し、使用するa[10001]と数秒かかり、使用するa[100001]とプログラムの実行に30秒ほどかかります。

問題は、すべての場合、5 vals のように push_back するだけで、唯一の違いは両端キューのサイズです。

なぜですか?

前面から要素を消去するだけでよいのですが、より良い方法はありますか? :D

ああ、また、push_backed 要素は何バイトを使用しますか?:D (このタイプの両端キューで)

0 投票する
1 に答える
1439 参照

jquery - queueNameとは何ですか?

このコードでは:

これはdequeue()関数の使用方法ですか?jQuery Webサイトでdequeue([queueName])と表示されます。decodeOut();をデキューしたいからです。フェードアウトはqueueNameですか?

これはdequeue()関数を使用する方法ですか?

ありがとうございました。

0 投票する
7 に答える
653 参照

java - 両面キューの問題

このメソッドを実行して、汎用値(EltType)を両面キュー(deque)に挿入しようとしていますが、理解できないoutOfBoundsExceptionが発生し続けます。誰かがこれで私を助けることができますか?これはコードからの抜粋ですが、これからつなぎ合わせることができると思います!

エラー :