私は、内部作業のための大きなベクトルを作成する関数を持っています。この関数を何度も呼び出す必要があるとします。ベクトルのメモリの作成/破壊を処理するための最良の方法は何だ(要因は、パフォーマンス、コードの品質です。)C++大きなベクトルが複数回呼び出される
方法1:
void f(int n) {
vector<int> v(n);
}
int main() {
for (int i = 0; i < 1000000; ++i) f(10000000);
}
方法2:
void f(int n) {
static vector<int> v;
v.reserve(99999999); // say this is the maximum possible size
v.resize(n);
}
int main() {
for (int i = 0; i < 1000000; ++i) f(10000000);
}
方法2は方法1よりもはるかに高速ですが、見た目は醜いです。 最適なアプローチは何ですか
パフォーマンスの向上を引き起こしているのは興味深いことですが、実際には、ベクトル v(n);で遅れを遅らせています。少なくとも私が思うもの。おそらく2つの予約呼び出しが第1の方法で強制される。 –
また、ソースからstlへのベクトルはコンパイラに固有です。 –