我了解使用“保留”来避免不必要的重新分配是一个好习惯(有效STL的第14项):

std::vector<int> v1;
v1.reserve(1000);

for (int i = 0; i < 1000; i++)
    v1.push_back(i);

致电分配时,是否适用相同的规则?
std::vector<int> v2;
//v2.reserve(v1.size()); // Better to do this?
v2.assign(v1.begin(), v1.end());

最佳答案

万一v1std::vector时,您实际上并不需要它,因为编译器/STL知道v2中将有多少个项目(并且在复制实际数据之前将reserve本身需要的数量)。

但是,对于一般情况,如果输入容器(reserve)不知道有多少个项目,而您手头有这个数字,则提前v1所需的数量可能是有道理的。

关于c++ - 在调用vector::assign()之前先调用vector::reserve()更好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11282923/

10-11 20:22
查看更多