呈現最少的代碼來描述該問題:優化不必要字符串複製在矢量<string>
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
創建發生;
第一次創建實際的
string
對象,第二次爲
vector
複製構建對象。
Demo
的push_back()
操作發生數百萬次,我支付一個額外的分配那些多次這是沒有用的,我的。
有沒有一種方法來優化呢?我接受任何適當的改變。 (沒有將此分類爲過早優化,因爲push_back()
在整個代碼中發生了很多次)。
使用字符串指針的向量? – GWW
@GWW,我對此表示歡迎;但'vector'會比'vector '更好,因爲;一旦緩衝區存儲在'vector'中,它就不會在我的設計中改變。另外,想知道是否有更好的主意。 –
iammilind
你可以使用C++ 11移動語義嗎?如果是這樣,那就這樣做。 – GManNickG