問題を説明するための最小限のコードを提示します。
struct A {
vector<string> v;
// ... other data and methods
};
A obj;
ifstream file("some_file.txt");
char buffer[BIG_SIZE];
while( <big loop> ) {
file.getline(buffer, BIG_SIZE-1);
// process buffer; which may change its size
obj.v.push_back(buffer); // <------- can be optimized ??
}
...
ここで2 回 string
の作成が行われます。1 回目は実際のstring
オブジェクトを作成し、2 回目はvector
. デモ
push_back()
操作は何百万回も発生し、私は何回も無駄な追加の割り当てを 1 回支払っています。
これを最適化する方法はありますか? 私はどんな適切な変更にもオープンです。push_back()
(コード全体で何度も発生するため、これを時期尚早の最適化と分類しないでください)。