vector
是c++编程中的最常见的容器之一,可以帮助用户自动管理存储空间,需要分配存储空间的场景,可以取代原生数组.
vector
在实践的过程中,提升性能的要点就是尽量使用reserve
,运行期能确定个数,应该用reserve
,不建议用传递大小的数组构造函数或者调用resize
为什么不建议使用resize
?
reserve
和resize
函数都能分配足够容纳下指定个数对象的空间.不同的是resize
会改变数组的size
,并且会调用对象的构造函数.reserve
:只是分配所需要的空间
在常规的情况下,默认生成的对象最后都会被覆盖掉,如果存储类型的构造函数比较复杂,会以大代价做无用功的
reserve
只是分配所需要的内存
#include <iostream>
#include <vector>
class Foo {
public:
Foo() {
std::cout << "Foo constructor" << std::endl;
}
};
int main(int argc, char* argv[]) {
std::cout << "initialize vector with element number..." << std::endl;
std::vector<Foo> vec1(5);
std::cout << "-------------" << std::endl;
std::cout << "vec1 size:" << vec1.size() << std::endl << std::endl;
std::cout << "vector resize..." << std::endl;
std::vector<Foo> vec2;
vec2.resize(5);
std::cout << "-------------" << std::endl;
std::cout << "vec2 size:" << vec2.size() << std::endl << std::endl;
std::cout << "vector reserve..." << std::endl;
std::vector<Foo> vec3;
vec3.reserve(5);
std::cout << "-------------" << std::endl;
std::cout << "vec3 size:" << vec3.size() << std::endl << std::endl;
return 0;
}
调用结果是
总结:
resize
和reserve
的区别为 reserve
申请一块大内存,什么都没有,但是resize
会得到一个个鲜活的对象.
使用vector
尽量用reserver
提高性能.