Представление минимального кода для описания проблемы:
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()
происходит миллионы раз , и я плачу за одно дополнительное выделение столько раз, что для меня бесполезно.
Есть ли способ оптимизировать это?Я открыт для любых подходящих изменений.(не относить это к категории преждевременной оптимизации, потому что push_back()
происходит так много раз по всему коду).