我写的验证实例:
#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;