我写的验证实例:

#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;