这是一个示例伪代码:
vector A;
void function1()
{
for(int i=0; i<100; i++)
{
vector B;
read a file and populate B;
do some operation on B;
add contents of B to A;
}
}
此代码性能/内存是否优化?如果没有,有人可以指出正确的方向吗?
您的向量B
需要在每次循环中重新分配。最好有一个固定的向量B
,一旦你永久保留足够的容量,并且只在循环期间clear()
:
std::vector<T> B;
B.reserve(/* biggest size you need */);
for (int i = 0; i != 100; ++i)
{
// read into B
A.insert(A.end(),
std::make_move_iterator(B.begin()),
std::make_move_iterator(B.end()));
B.clear();
}
除了A.insert
,您还可以尝试:
A.reserve(A.size() + B.size());
std::move(B.begin(), B.end(), std::back_inserter(A));
这具有不同的异常保证。使用最适合您要求的那种。
如果您知道所有追加操作的全部大小,则还可以预先reserve
足够的容量A
以避免重新分配。