【发布时间】:2011-11-26 13:38:12
【问题描述】:
提供描述问题的最少代码:
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 次strong> string 创建发生; 第一次创建实际的string 对象,第二次为vector 复制构造它。 Demo
push_back() 操作发生 数百万次,而我多次支付额外的分配费用,这对我没有用处。
有没有办法优化这个?我愿意接受任何合适的改变。 (不将此归类为过早优化,因为push_back() 在整个代码中发生了很多次)。
【问题讨论】:
-
使用字符串指针向量?
-
@GWW,我对此持开放态度;但是
vector<char*>会比vector<string*>更好,因为;一旦缓冲区存储在vector中,我的设计就不会改变。另外,想知道是否有更好的主意。 -
你可以使用 C++11 移动语义吗?如果是这样,请这样做。
-
@GMan,很遗憾不可能。代码应符合 C++03。否则
std::movewith rref 应该是我的首选。 -
在您的演示中,您不是从向量构造函数获得一个分配,而从字符串构造函数获得另一个分配吗?
标签: c++ optimization vector dynamic-allocation