どの方法が高速でオーバーヘッドが少ないのか?ベクトルをクリアするか新しいベクトルを定義する方が速い。
方法1:
void foo() {
std::vector<int> aVector;
for (int i = 0; i < 1000000; ++i) {
aVector.clear();
aVector.push_back(i);
}
}
方法2:
void foo() {
for (int i = 0; i < 1000000; ++i) {
std::vector<int> aVector;
aVector.push_back(i);
}
}
あなたは例が無意味であることを言うかもしれません!しかし、これは私の大きなコードからのちょっとした抜粋です。要するに私が知りたいことは
UPDATE
「をするたびに新しいベクトルを作成する」「一度ベクトルを作成し、使用するためにそれをクリアする」または
に優れています
提案していただきありがとうございます。私は両方をテストしましたが、結果は
です。方法1:
$ time ./test1
real 0m0.044s
user 0m0.042s
sys 0m0.002s
方法2:ベクトルをクリア
$ time ./test2
real 0m0.601s
user 0m0.599s
sys 0m0.002s
が優れています。たぶんこれは他の誰かを助けるかもしれません。
"ベクターをクリアするか、新しいベクターを定義する(どちらが速いのか)" - ベンチマークで知ることができます。プラットフォームや実装固有の詳細に非常に依存するため、一般的な記述はありません。 –
申し訳ありませんが、g ++がメソッドの最適化コードをどのように生成するかを知りたいと思います。どちらがコンパイラに適していますか? – mahmood
違いがあれば、 'clear'メソッドが高速になると思います。 –