タグ付けされた質問 「dynamic-arrays」

7
C動的に成長する配列
ゲーム内のエンティティの「生の」リストを読み取るプログラムがあり、さまざまなものを処理するために、エンティティの数が不定のインデックス番号(int)を保持する配列を作成するつもりです。そのようなインデックスを維持するためにメモリやCPUを使いすぎないようにしたい... 私がこれまでに使用した迅速で汚い解決策は、メインの処理関数(ローカルフォーカス)で、最大ゲームエンティティのサイズの配列と、リストに追加された数を追跡する別の整数を宣言することです。すべてのリストが3000個以上の配列を保持しているため、これは満足のいくものではありませんが、それは無駄ではありませんが、さまざまな関数に6〜7個のリストのソリューションを使用できるので無駄です。 これを実現するためのC(C ++またはC#ではない)固有のソリューションは見つかりませんでした。ポインターを使用することはできますが、ポインターを使用するのは少し怖いです(唯一の可能な方法でない限り)。 配列が変更された場合、配列はローカル関数のスコープを離れません(関数に渡され、その後破棄されます)。 ポインターが唯一の解決策である場合、リークを回避するためにポインターを追跡するにはどうすればよいですか?
126 c  dynamic-arrays 

8
Pythonで任意のサイズの空の配列を取得するにはどうすればよいですか?
基本的に私はこれと同等のPythonをCで望んでいます: int a[x]; しかしPythonでは私は次のような配列を宣言します: a = [] そして問題は私が次のような値でランダムなスロットを割り当てたいです: a[4] = 1 しかし、配列が空であるため、Pythonではそれを行うことはできません。



10
動的に割り当てられたアレイの理想的な成長率はどれくらいですか?
C ++にはstd :: vectorがあり、JavaにはArrayListがあり、他の多くの言語には独自の形式の動的に割り当てられた配列があります。動的配列のスペースが不足すると、動的配列はより大きな領域に再割り当てされ、古い値が新しい配列にコピーされます。このようなアレイのパフォーマンスの中心となる問題は、アレイのサイズがどれだけ速く成長するかです。常に現在のプッシュに合うだけの大きさに成長する場合は、毎回再割り当てすることになります。したがって、配列サイズを2倍にするか、たとえば1.5倍にするのが理にかなっています。 理想的な成長因子はありますか?2倍?1.5倍?理想とは、数学的に正当化され、パフォーマンスと無駄なメモリのバランスをとることを意味します。理論的には、アプリケーションにプッシュの潜在的な分布がある可能性があることを考えると、これはアプリケーションにいくらか依存していることを理解しています。しかし、「通常」最高の値があるのか​​、それとも厳しい制約の中で最高と見なされる値があるのか​​知りたいです。 これに関する論文がどこかにあると聞きましたが、見つけることができませんでした。

3
サイズ0の動的配列へのポインタの増分は未定義ですか?
AFAIK、ただし、サイズが0の静的メモリ配列を作成することはできませんが、動的配列を使用して作成できます。 int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined 私が読んだpように、1つの最後の要素のように動作します。p指すアドレスを印刷できます。 if(p) cout << p << endl; イテレータ(最後の要素)ではできないので、そのポインタ(最後の要素)を逆参照できないことは確かですが、そのポインタをインクリメントするかどうかはわかりませんp。イテレータのような未定義の動作(UB)ですか? p++; // UB?

1
C ++ 20以降、割り当てられたストレージでのポインター演算は許可されていますか?
C ++ 20標準では、配列型は暗黙の存続時間型であると言われています。 非暗黙的なライフタイムタイプの配列を暗黙的に作成できるということですか?このような配列を暗黙的に作成しても、配列の要素は作成されませんか? このケースを考えてみます //implicit creation of an array of std::string //but not the std::string elements: void * ptr = operator new(sizeof (std::string) * 10); //use launder to get a "pointer to object" (which object?) std::string * sptr = std::launder(static_cast<std::string*>(ptr)); //pointer arithmetic on not created array elements well defined? …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.