私はC++コードのボトルネックを特定しました。私の目標はそれをスピードアップすることです。条件が真であれば、あるベクトルから別のベクトルにアイテムを移動しています。私はC++でこれを行う方法をハッキングしてきたし、それが正常に動作しているベクトルを何回もpush_backするための速い方法
my_vector = [x for x in data_vector if x > 1]
:Pythonで
、これを行うのニシキヘビの方法は、リストの内包表記を使用することです。しかし、私はこのループをwhileループで何百万回も呼びますが、それは遅いです。私はメモリ割り当てについて多くのことを理解していませんが、私は自分の問題がpush_back
を使ってメモリを何度も何度も割り当てていると仮定しています。このコードをスピードアップするために私のメモリを別々に割り当てる方法はありますか? (my_vector
は、for
-loopが完了するまでどのくらいの大きさでなければならないのかわかりません)。
std::vector<float> data_vector;
// Put a bunch of floats into data_vector
std::vector<float> my_vector;
while (some_condition_is_true) {
my_vector.clear();
for (i = 0; i < data_vector.size(); i++) {
if (data_vector[i] > 1) {
my_vector.push_back(data_vector[i]);
}
}
// Use my_vector to render graphics on the GPU, but do not change the elements of my_vector
// Change the elements of data_vector, but not the size of data_vector
}
助けを求めるときは、コンテナの[参考文献](http://en.cppreference.com/w/cpp/container/vector)に相談してください。 'reserve'のような便利な関数を見つけるのに役立ちます。 – NathanOliver
btw 'push_back'は必ずしもメモリを割り当てるわけではありません。 'vector'はいくつかのメモリ(' vector'の 'capacity()'メソッドを呼び出すことで確認できます)を予約し、 'size'が' capacity'に達すると新しいメモリだけが割り当てられます。しかし、 'reserve 'を呼び出すことで、何らかのメモリを確保する前に' vector'にいつも予約することができます。 –
'data_vector'を' my_vector'にコピーした後で 'data_vector'が必要ですか? 'スワップ'スイートになるかもしれない? –