C++中的优化(对象声明)



这是一个示例伪代码:

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以避免重新分配。

最新更新