問題タブ [dynamic-arrays]

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 投票する
4 に答える
1846 参照

java - Java Null ポインター例外

Web で見つけたクラスを "エンティティ" の動的配列の int の動的配列に適合させようとしましたが、"NullPointerException" が発生しています。

例外を発生させるコードは次のとおりです。

DynArrayEntities クラスの関連部分:

よろしくお願いします。

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

c# - C#最後に配列を1要素ずつ増やす

私のプログラムには、新しい要素が配列の最後まで1つずつ成長する、成長する配列がたくさんあります。リストは、配列に比べてアクセス時間が遅いため、プログラムの重要な部分で速度のボトルネックであることがわかりました。配列に切り替えると、パフォーマンスが許容レベルまで大幅に向上しました。配列を大きくするには、Array.Resize を使用しています。私の実装では配列サイズが約 20 要素に制限されているため、これはうまく機能するため、Array.Resize の O(N) パフォーマンスは制限されます。

しかし、Array.Resize を使用せずに、最後に配列を 1 要素だけ増やす方法があれば、より良いでしょう。古い配列を新しいサイズの配列にコピーすると思います。

私の質問は、List または Array.Resize を使用せずに、配列の末尾に 1 つの要素を追加するためのより効率的な方法はありますか?

0 投票する
5 に答える
3338 参照

c - ポインタを使用してCで2D配列の次元を見つける

次のように C で 2D 配列を作成します。

今、私は電話します:

関数funcで、行と列の次元を計算するにはどうすればよいですか?

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

c++ - C++でのオブジェクトの動的配列のクリーンアップ

オブジェクトがどのように渡されるか(参照または値)およびオブジェクトが配列にどのように格納されるかについての情報が見つからないため、C++でオブジェクトの配列を処理することについて少し混乱しています。

オブジェクトの配列はそのオブジェクトタイプへのポインタの配列であると思いますが、これがどこにも書かれているのは見つかりませんでした。それらはポインタでしょうか、それともオブジェクト自体がメモリ内の配列に配置されているのでしょうか。

以下の例では、カスタムクラスmyClassが文字列を保持します(これにより可変サイズになりますか、または文字列オブジェクトが文字列へのポインタを保持するため、一定量のスペースを占有します。 myContainer内のmyClassオブジェクト。myContainer.addObject()メソッドで、より大きな配列を作成し、すべてのオブジェクトを新しいオブジェクトと一緒にその配列にコピーしてから、古いオブジェクトを削除しようとしています。 mデストラクタを使用してメモリを適切にクリーンアップします-この領域でどのような改善を行うことができますか?

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

c - Cのパイプを介して動的配列を使用して構造体を読み書きする

内部に動的配列を持つ構造体があります。

そして、この構造体を C のパイプを介してプロセスのリングに渡したいと考えています。各プロセスで count の値を変更すると、正しく変更されます。私の問題は動的配列にあります。

私はそのように配列を割り当てています:

各プロセスは、パイプから読み取り、その配列に対して何かを実行してから、別のパイプに書き込む必要があります。リングは正しく設定されています。そこは問題ありません。私の問題は、最初のプロセスを除くすべてのプロセスが配列の正しいコピーを取得していないことです。最初のプロセスで、すべての値をたとえば 10 に初期化します。ただし、後続のものではすべて 0 として表示されます。

ログ:

さて、コードを次のように変更すると、

すべてがパイプに正しく渡されます。問題ありません。私はCでreadandを使用しています:write

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

c++ - クラスのコンストラクターで定数サイズなしで静的配列を定義する方法は? (C++)

次のように定義されたクラスがあります。

次のような静的配列を含める必要があります。

ただし、クラス内で定義することはできないため、2D 配列へのポインターを作成し (そして、好奇心から、3、4、および 5D 配列)、それをクラスのメンバーとして持ち、それを初期化することができます。コンストラクターは次のようになります。

編集:ここでの考え方は、すべてのオブジェクトの幅と高さが異なるため、そのオブジェクトを表すために使用する配列はオブジェクトに固有のものになりますが、その配列が(できればコンストラクターで)定義されると、変更されません. また、特定のオブジェクトの幅と高さの値は、コンパイル時に認識されます。

編集: 配列はpresc、2 つのオブジェクトの配列を 1 つの大きな配列に重ね合わせ、重複する場所を確認することによる衝突検出用です。次のように宣言します。

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

c++ - C++ が動的に割り当てられない可変長配列を許可するのはなぜですか?

私はC ++に比較的慣れていません。最初から、次のようなことはできないと教えられてきました。

代わりに、動的メモリを使用する必要があります。ただし、最近、上記がコンパイルされることを発見しました(ただし、ISO C ++で禁止されているというペダンティックな警告が表示されます)。標準で許可されていない場合、それを行うのは明らかに悪い考えであることは知っていますが、以前はこれが可能であることさえ知りませんでした。

私の質問は、標準で許可されていない場合、動的に割り当てられない可変長配列を g++ が許可するのはなぜですか? また、コンパイラがそれを行うことが可能である場合、なぜそれが標準にないのですか?

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

c++ - 動的 2D 配列の書き込み時にアクセス違反が発生する... 時々

このプログラムは動的配列を生成することを目的としていますが、特定の次元を指定して書き込むと、アクセス違反エラーが発生します。例: R = 6、C = 5 はクラッシュしますが、R = 5、C = 6 はクラッシュしません。ご参考までに、この壊れたプログラムを「修正」するのは私の宿題ではありません。これはクラスで教えられた方法です。また、私の評価の一部は、この方法を使用することであるため、ベクトルはアウトです。前もって感謝します!

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

c - void ポインタを使用した動的配列キュー データ構造の問題

思うように解決できないのかもしれませんが、よくわからないので質問させてください...

ユーザーが必要な数のアイテムで初期化できるように、動的配列を使用して単純な Queue を実装しました。voidまた、任意のデータ型を許可するためにポインターを使用しようとしていますが、それが問題です。

これが私のコードです:

問題はqueuePop機能にあります。呼び出すと、すぐに解放するため、値が失われます。このジレンマを解決できないようです。ライブラリを汎用的でモジュール化したいと考えています。ユーザーはメモリの割り当てと解放を気にする必要はありません。それはライブラリの仕事です。

ユーザーはどのようにして値を取得しqueuePop、ライブラリにすべてのメモリ割り当て/解放を処理させることができますか?

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

delphi - DelphiのTStringList、動的配列またはリンクリスト?

私には選択肢があります。

保存してアクセスする必要がある、既に注文された文字列が多数あります。以下を使用して選択できるようです:

  1. TStringList

  2. 文字列の動的配列、および

  3. 文字列のリンク リスト (単方向リンク)

    アランはコメントで、私も選択肢に追加することを提案しました。

  4. TList<string>

これらのそれぞれが他のものよりも優れているのはどのような状況ですか?

小さなリスト (10 項目未満) に最適なのはどれですか?

大規模なリスト (1000 項目以上) に最適なのはどれですか?

巨大なリスト (1,000,000 アイテム以上) に最適なのはどれですか?

メモリ使用量を最小限に抑えるにはどれが最適ですか?

最後に余分なアイテムを追加するために読み込み時間を最小限に抑えるのに最適なのはどれですか?

最初から最後までリスト全体にアクセスするためのアクセス時間を最小限に抑えるには、どれが最適ですか?

これに基づいて(または他のものに基づいて)、どのデータ構造が望ましいでしょうか?

参考までに、私は Delphi 2009 を使用しています。


コメントでディミトリーは次のように述べています。

タスクとデータ アクセス パターンを説明すると、正確な回答を得ることができます

わかった。大量のデータを含む家系図プログラムがあります。

人ごとに、いくつかのイベントと属性があります。私はそれらを短いテキスト文字列として保存していますが、0 から数百までの範囲で、1 人あたり多数あります。そして、私は何千人もの人々を持っています。それらへのランダムアクセスは必要ありません。各人物に関連付けられた既知の順序で多数の文字列として関連付けられている必要があるだけです。これは、何千もの「小さなリスト」の私の場合です。それらはロードしてメモリを使用するのに時間がかかり、すべてが必要な場合 (たとえば、生成されたレポート全体をエクスポートするなど) にアクセスするのに時間がかかります。

次に、数十万の名前を持つことができる「仮想」ツリービューのセクションのすべての名前など、いくつかの大きなリストがあります。ここでも、インデックスでアクセスできるリストのみが必要です。これらは効率のためにツリービューとは別に保存され、ツリービューは必要な場合にのみそれらを取得します。これは読み込みに時間がかかり、私のプログラムにとってはメモリに関して非常にコストがかかります。しかし、一度にアクセスされるのはごくわずかなので、アクセス時間を気にする必要はありません。

うまくいけば、これで私が達成しようとしていることのアイデアが得られます。

ps Delphi の最適化に関する多くの質問を StackOverflow に投稿しました。私のプログラムは 100,000 人の 25 MB のファイルを読み取り、8 秒でデータ構造、レポート、およびツリービューを作成しますが、そのために 175 MB の RAM を使用します。32 ビット Windows で数百万人のファイルをロードすることを目指しているため、これを削減するために取り組んでいます。


この StackOverflow の質問で、TList を最適化するためのいくつかの優れた提案を見つけました。 より高速な TList 実装はありますか?