C++中的vector:resize()、reserve()、clear()、shrink_to_fit()、swap()

resize()

  • 函数原型
    void resize (size_type n);
    void resize (size_type n, const value_type& val);
    
  • 当n<size,保留vector的前n个元素,令size=n,移除后面的元素,不改变capacity
  • 当n>size&&n<capacity,扩充vector的元素个数为n个,令size=n,若指定了val,则扩充的元素都成为val的拷贝,若未指定val,则为默认值,不改变capacity
  • 当n>capacity,触发内存重分配,改变capacity,令size=n,拷贝原来的值,处理val,然后销毁旧的内存空间

reserve()

  • 函数原型
    void reserve (size_type n);
    
  • 当n>capacity,触发内存重分配,改变capacity,size不变,拷贝原来的值,然后销毁旧的内存空间
  • 其他情况,不发生任何影响

clear()

  • clear()等价于resize(0),不回收内存空间
  • 想移除全部元素,同时回收内存空间,可采用:
    vector<int> {
          
          }.swap(vec);
    
    创建一个空的临时对象(size和capacity都为0),然后交换内容,执行后vec的size和capacity都为0,vec原来的内存因为临时对象被析构而被回收

shrink_to_fit()

  • 使capacity=size,等价于
    vector<int> {
          
          vec}.swap(vec);
    
    临时对象拷贝复制vec,然后vec和临时对象交换内容,vec的capacity等于size,vec原来的内存因为临时对象被析构而被回收

猜你喜欢

转载自blog.csdn.net/m0_46324847/article/details/126615381
今日推荐