C++ 11では、1次元ベクトルに対する時間ベクトルはどのようにして2次元ベクトルになりますか?
与えられた2Dベクトルでは、すべての内側ベクトルは同じサイズです。2Dベクトルと1Dベクトル
例:要素がランダムにアクセスされた場合、ベクトルのアバターがより良い実行することになり
std::vector<int> Y(40);
対
std::vector<std::vector<int>> X{10, std::vector<int>(4)};
?
C++ 11では、1次元ベクトルに対する時間ベクトルはどのようにして2次元ベクトルになりますか?
与えられた2Dベクトルでは、すべての内側ベクトルは同じサイズです。2Dベクトルと1Dベクトル
例:要素がランダムにアクセスされた場合、ベクトルのアバターがより良い実行することになり
std::vector<int> Y(40);
対
std::vector<std::vector<int>> X{10, std::vector<int>(4)};
?
単一のstd::vector
は、本質的に簡単ですが、どこかに格納されたメモリの単なる連続ブロックです。
std::vector
のstd::vector
は、より多くのオーバーヘッドを持ちますが、より強力です(たとえば、それぞれの内側のベクトルが異なるサイズになる可能性があるため)。
ランダムアクセス性能は、使用のあなたの特定のパターンのために徹底的にベンチマークする必要がありますが、主な違いは、ということです:あなたはちょうどあなたが2を持っているsize_t index = x + y*WIDTH
を計算し、ネストされたベクトルを持つ要素
間接的なレベルの間接化は、最近のシステムの大きな要因によって、状況を遅らせる余分なメモリアクセスを招きます。現在の古典的なCPUでは、メモリアクセスに比べて乗算がかなり時間がかかるので、余分な間接化が高速になることがあります。 20年以上前に書かれたコードを見る人もいます。一般的に、可変の行サイズを必要としない限り、今日は悪い習慣です。 – doug
コンパイル時に内部サイズまたは外部サイズを知っている場合は、たとえば 'std :: array
時間測定と同様に、気になるシステムで測定する必要があります。 – merlin2011
@ merlin2011私は、C++が1Dと比較して2Dベクトルを最適化するという点で何か違うのだろうかと思っていました。私はいくつかの実行として心配していたので、C++ 11の専門知識が私に間違ったものと仮定してしまうかもしれません。 – letsBeePolite
パフォーマンス測定の第1の規則は、最初の測定が常に間違っていることです。しかし、それが私たちが自信を持つ理由があるまで測定を続けている理由です。 :P – merlin2011