牛客C++面经——resize与reverse

目录

resize与reverse:

size与capacity:

理解:

测试代码:

备注:


resize与reverse:

  • resize():改变当前容器内含有元素的数量(size()),eg: vector<int>v; v.resize(len);v的size变为len,如果原来v的size小于len,那么容器新增(len-size)个元素,元素的值为默认为0.当v.push_back(3);之后,则是3是放在了v的末尾,即下标为len,此时容器是size为len+1;
  • reserve():改变当前容器的最大容量(capacity),它不会生成元素,只是确定这个容器允许放入多少对象,如果reserve(len)的值大于当前的capacity(),那么会重新分配一块能存len个对象的空间,然后把之前v.size()个对象通过copy construtor复制过来,销毁之前的内存;

size与capacity:

  •     size指容器当前拥有的元素个数;
  •     capacity则指容器在必须分配新存储空间之前可以存储的元素总数

理解:

容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。

而reserve()函数预分配出的空间没有被初始化,所以不可访问。

测试代码:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> a;
    
    //size指容器当前拥有的元素个数;
	//capacity则指容器在必须分配新存储空间之前可以存储的元素总数 
    
    a.reserve(100);//改变capacity 
    a.resize(50);//改变size 
    cout<<a.size()<<"  "<<a.capacity()<<endl;//50  100
        
    a.resize(150);
    cout<<a.size()<<"  "<<a.capacity()<<endl;//150  150 
        
    a.reserve(50);
    cout<<a.size()<<"  "<<a.capacity()<<endl;//150  150
        
    a.resize(50);
    cout<<a.size()<<"  "<<a.capacity()<<endl;//50  150   
       
}

备注:

原来文章里的输出结果有误,起码在G++编译环境下是有误的……

发布了228 篇原创文章 · 获赞 76 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/103977885
今日推荐