vector的性能利器-reserve

桃扇骨 2023-07-13 03:08 98阅读 0赞

vector是c++编程中的最常见的容器之一,可以帮助用户自动管理存储空间,需要分配存储空间的场景,可以取代原生数组.

vector在实践的过程中,提升性能的要点就是尽量使用reserve,运行期能确定个数,应该用reserve,不建议用传递大小的数组构造函数或者调用resize

为什么不建议使用resize

reserveresize函数都能分配足够容纳下指定个数对象的空间.不同的是resize会改变数组的size,并且会调用对象的构造函数.reserve:只是分配所需要的空间

在常规的情况下,默认生成的对象最后都会被覆盖掉,如果存储类型的构造函数比较复杂,会以大代价做无用功的

reserve只是分配所需要的内存

  1. #include <iostream>
  2. #include <vector>
  3. class Foo {
  4. public:
  5. Foo() {
  6. std::cout << "Foo constructor" << std::endl;
  7. }
  8. };
  9. int main(int argc, char* argv[]) {
  10. std::cout << "initialize vector with element number..." << std::endl;
  11. std::vector<Foo> vec1(5);
  12. std::cout << "-------------" << std::endl;
  13. std::cout << "vec1 size:" << vec1.size() << std::endl << std::endl;
  14. std::cout << "vector resize..." << std::endl;
  15. std::vector<Foo> vec2;
  16. vec2.resize(5);
  17. std::cout << "-------------" << std::endl;
  18. std::cout << "vec2 size:" << vec2.size() << std::endl << std::endl;
  19. std::cout << "vector reserve..." << std::endl;
  20. std::vector<Foo> vec3;
  21. vec3.reserve(5);
  22. std::cout << "-------------" << std::endl;
  23. std::cout << "vec3 size:" << vec3.size() << std::endl << std::endl;
  24. return 0;
  25. }

调用结果是

在这里插入图片描述

总结:

resizereserve的区别为 reserve申请一块大内存,什么都没有,但是resize会得到一个个鲜活的对象.

使用vector尽量用reserver提高性能.

发表评论

表情:
评论列表 (有 0 条评论,98人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vector性能利器-reserve

    `vector`是c++编程中的最常见的容器之一,可以帮助用户自动管理存储空间,需要分配存储空间的场景,可以取代原生数组. `vector`在实践的过程中,提升性能的要点就是