我了解使用“保留”来避免不必要的重新分配是一个好习惯(有效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());
最佳答案
万一v1
是std::vector
时,您实际上并不需要它,因为编译器/STL知道v2
中将有多少个项目(并且在复制实际数据之前将reserve
本身需要的数量)。
但是,对于一般情况,如果输入容器(reserve
)不知道有多少个项目,而您手头有这个数字,则提前v1
所需的数量可能是有道理的。
关于c++ - 在调用vector::assign()之前先调用vector::reserve()更好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11282923/