問題タブ [circular-buffer]
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.
c# - 固定サイズの循環バッファーのインデックスを効率的にラップする方法
固定サイズの循環バッファー (配列として実装) があります。初期化時に、バッファーは指定された最大数の要素で満たされ、円内の現在の位置を追跡するために単一の位置インデックスを使用できます。
循環バッファ内の要素にアクセスする効率的な方法は何ですか? これが私の現在の解決策です:
いくつかの定義:
end_index
は、円の最後の要素の直後の要素のインデックスです (また、start_index または円の最初の要素と同じと見なされます)。
buffer_size
バッファの最大サイズです。
c# - スタックの代替
C#を使用して.Net環境で作業しています。Stack データ構造の代わりが必要です。ある種のバインドされたスタック。コレクション内の要素の数は、特定の固定数を超えてはなりません。そして、その数が達成され、新しい要素がプッシュされた場合、最も古い要素よりも削除する必要があります。元に戻す/やり直し戦略のコマンドを保存するためにこれが必要です。
c - 循環バッファのエンドポインタの問題
VisualC++を使用しています。
循環バッファを実装しようとしていますが、このCBは特定のタイプのデータを処理する必要があります...実際、これは構造データであり、charタイプに格納されるある種の生データとそれに関連付けられた日付がありますデータ...これは構造を使用して実装されています。
詳細については、次のコードを参照してください。
コードをコンパイルするとすべて問題ありませんが、デバッグすると、buffer_endポインターに問題があり、bad_pointerと表示されます。これは容量が56より大きい場合に発生します...理由はわかりません。ポインターはバッファーの終わりを指すことはできませんが、容量が56未満の場合、ポインターはバッファーの終わりを正確に指します
なぜこれがこのように起こるのか、そしてそれを修正する方法を誰かが知っているなら、私を助けてください。
前もって感謝します
java - 循環配列を使用して両端キューを実装しますか?
循環配列を使用してこの両端キューを実装するのに多くの問題があります。特に、remove メソッドは、何を試しても間違った要素を削除しているようです。誰でも助けることができますか?
c++ - boost::multi_array を boost::circular_buffer で初期化する
boost::multi_array
ofを作成したいのboost::circular_buffer<double>
ですが、開始方法がわかりません。boost::circular_buffer<double>
サイズの12 個の配列である必要があります50
。
私は試した:
コンパイルエラーが発生しました。
誰かがb
正しく開始する方法のヒントを教えてもらえますか?
java - 循環配列を使用したキューの実装: 循環配列のサイズを変更する最良の方法はどれですか?
循環配列を使用してキューを実装していますが、メソッドの実装でスタックしていresize()
ます (配列がいっぱいの場合)。
メソッド内enqueue()
で、配列のサイズがその長さと等しいかどうかを確認し、それがいっぱいかどうかを取得します。ここで、例外をスローする代わりに、配列のサイズを変更しようとしています。
問題は、考慮すべき2つのケースがあるということです
- フロント <= リア
- リヤ<フロント
古い配列の要素を新しい大きな配列にコピーする最良の方法はどれですか?
次のようなforループを使用して考えました:
次にoldArray
= newArray
、戻りnewArray
、サイズ変更が完了しました
これを行うために使用された for の量がわからないので、値を失うのではないかと心配しています。
これを行うためのより良い方法があるかどうか誰かに教えてもらえますか?
c# - 1つの配列要素のラップアラウンドをシフトする方法は?
配列を反復処理する関数を作成しようとしています。特定のタイプの値が見つかると、定義された数の場所で右にシフトします。
一時的に値を格納し、右側の要素を左側にシフトしてから、一時的な値を正しい場所に書き込むことで、要素をシフトする方法を知っています。
私が苦労しているのは、特定の文字が配列の終わり近くに表示される場合、それをラップアラウンドして配列の先頭から続行する必要があるため、循環です。
したがって、配列は、たとえば、大文字を右に3桁、特殊文字を左に1桁シフトします。
8の要素を右にシフトするには、下の3つの場所に配置しますが、これは、8が配列の最後から3つの要素よりも前に表示され、ラップアラウンドしない場合にのみ機能します。
入力配列:
必要な出力:
c++ - c++: 文字列のマップの要素へのアクセスと循環バッファーのブースト
都市名のテキスト ファイルをベクトルに読み取り、stl::map を使用して各都市をブースト循環バッファーに関連付けるプログラムを作成しています。また、別のテキスト ファイルから文字列として読み取った後、double 型に変換した温度データのベクトルもあります。このデータを選択した循環バッファにフィードする方法を知りたいです。たとえば、温度データはボストンのものなので、ボストンに関連付けられた循環バッファーに入れたいと考えています。誰かがこれを行う方法を教えてくれたら、本当に感謝しています! これが私のコードです。マップに関係するコードは一番下にあります。
c++ - テンプレートクラスタイプのサイズ設定
循環バッファのテンプレートクラスを作成しました。
このクラスが実行する操作の一部は、のサイズの正確な評価に依存していT
ます。これは、T
is BYTE
(つまりsizeof(T) == 1
、チェック)の場合は問題なく機能するようです。ただし、同じクラスを使用しようとするとT
、DWORD
何らかの理由sizeof(T)
で16と評価されます。最後にチェックしたとき、ダブルワードは16ではなく4バイトです。なぜこれが発生するのか誰かが知っていますか?ありがとう。
追加情報
独自の性質のためにすべてのコードを投稿することはできませんが、問題のクラス宣言と関数定義は次のとおりです。
上記の問題は、pFlags->pHead += sizeof(T);
ofIncrementHead
を実行すると発生します。