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

时间:2016-03-16 14:44:55

标签: c++ c++11 optimization

这是一个示例伪代码:

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; 
    }
}

此代码性能/内存是否已优化?如果没有,有人可以指出正确的方向吗?

1 个答案:

答案 0 :(得分:3)

您的向量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$('.accordion h3.active').slideDown(); 提供足够的容量,以避免重新分配。