这是一个示例伪代码:
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;
}
}
此代码性能/内存是否已优化?如果没有,有人可以指出正确的方向吗?
答案 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();
提供足够的容量,以避免重新分配。