面试整理那些事儿

 我写的验证实例:

#include<iostream>

#include <string.h>

#include <vector>

using namespace std;

int main(){

    char a[5]={1,2};

    cout<<sizeof(a)<<endl;

   

    cout<<strlen(a)<<endl;

    cout<<"---------------------"<<endl;

    vector<int> vec(5);

    //  vec.push_back(1);

    //  vec.push_back(2);

    vec.emplace(vec.begin(),2);

    vec.emplace_back(2);

    cout<<"vec第一个参数:"<<vec[0]<<endl;

    cout<<"vec第六个参数:"<<vec[6]<<endl;



 

    cout<<sizeof(vec)<<endl;

    cout<<vec.capacity()<<endl;

    cout<<vec.size()<<endl;


 

    return 0;

}

得出的结论如下:

 

capacity,如果不重新分配内存,当前已经分配的可以容纳的元素的个数.
max_size最大的可能的元素个数.
size是当前元素个数

sizeof是vector本身的大小(sizeof(vector<int>))

  • size()告诉你容器中有多少元素。它没有告诉你容器为它容纳的元素分配了多少内存。
  • capacity()告诉你容器在它已经分配的内存中可以容纳多少元素。那是容器在那块内存中总共可以容纳多少元素,而不是还可以容纳多少元素。如果你想知道一个vector或string中有多少没有被占用的内存,你必须从capacity()中减去size()。如果size和capacity返回同样的值,容器中就没有剩余空间了,而下一次插入(通过insert或push_back等)会引发上面的重新分配步骤。
  • resize(Container::size_type n)强制把容器改为容纳n个元素。调用resize之后,size将会返回n。如果n小于当前大小,容器尾部的元素会被销毁。如果n大于当前大小,新默认构造的元素会添加到容器尾部。如果n大于当前容量,在元素加入之前会发生重新分配。
  • sizeof(vector<int>)输出为vector内部指针的大小,因为vector内部指针为:

 

vector内部有三个指针维护着vector的缓存区域

  • _M_start,被封装在begin()内,它指向已分配的缓存区的第一个块区

  • _M_finish:备封装在end()内,它指向缓存块区中已插入的最后一个元素的下一个内存块.

  • _M_end_of_storage,它指向已分配缓存区的末端的下一个内存块,这个内存块并非当前已分配缓存块区的有效区域.

因此sizeof(vector) 输出为 8+8+8=24;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值