通俗易懂讲解vector resize and reserve

2020-06-22  本文已影响0人  Optimization

vector.resize 与 vector.reserve的区别

1.作用:

resize的作用是:重新调整容器中已经保存的元素个数
reserve的作用是:让容器重新分配指定大小的空间

2.问题:

reserve的作用:我不进行reserve或者我reserve很小的,这样的话,我还能push_back吗?可以,reserve(XXX)小于capacity不会起作用,大于的话,系统会重新分配内存。

#define DEBUG_CPP
#ifdef DEBUG_CPP
      std::vector<int> vNum(10, 2);
      std::cout << "vNum.capacity():" << vNum.capacity();
      vNum.reserve(2);// 太小,小于capacity是不会起作用的
      vNum.push_back(20);
      vNum.push_back(30);
      std::cout << "vNum.size():" << vNum.size()<< std::endl;
      for (int i = 0; i < vNum.size(); i++) {
          std::cout << vNum[i]<< " ";
      }
      std::cout << std::endl;
#endif
#undef DEBUG_CPP

resize的作用:假设vector存了10个元素,我resize(8),结果是怎样的?后面2个元素被删除。我还能push_back吗?可以!!!resize只是影响之前的。

#define DEBUG_CPP
#ifdef DEBUG_CPP
      std::vector<int> vNum(10, 2);
      std::cout << "vNum.capacity():" << vNum.capacity();
      vNum.resize(2);
      vNum.push_back(20);
      vNum.push_back(30);
      std::cout << "vNum.size():" << vNum.size()<< std::endl;
      for (int i = 0; i < vNum.size(); i++) {
          std::cout << vNum[i]<< " ";
      }
      std::cout << std::endl;
#endif
#undef DEBUG_CPP

2 2 20 30

上一篇 下一篇

猜你喜欢

热点阅读