• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++:STLvector:sizeof(vector)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原文地址:http://blog.csdn.net/zcsylj/article/details/7857009

int的大小是4,定义vector<int> vec,vec中有一个元素,sizeof(vec)=20,如果有1000个元素,则sizeof(vec)是多少?

 1 #include <iostream>  
 2 #include <vector>  
 3 using namespace std;  
 4 int main()  
 5 {  
 6      vector<int> vec;  
 7      for(int i=0;i<100;i++)  
 8      {  
 9         vec.push_back(i);  
10         cout<<sizeof(vec)<<endl;   
11         cout<<vec.size()<<endl;  
12      }   
13 }  

输出结果:

1 20  
2 1  
3 ……  
4 20  
5 100  
6 请按任意键继续. . .  

由此可以看出:sizeof(vec)只取决于vector里面存放的数据类型,与元素个数无关。该值应该是与编译器相关的。

 1 #include <iostream>  
 2 #include <vector>  
 3 using namespace std;  
 4 int main()  
 5 {  
 6     cout<<"sizeof(vector<char>) = "<<sizeof(vector<char>)<<endl;  
 7     cout<<"sizeof(vector<int>) = "<<sizeof(vector<int>)<<endl;  
 8     cout<<"sizeof(vector<short>) = "<<sizeof(vector<short>)<<endl;  
 9     cout<<"sizeof(vector<double>) = "<<sizeof(vector<double>)<<endl;  
10     cout<<"sizeof(vector<long>) = "<<sizeof(vector<long>)<<endl;  
11     cout<<"sizeof(vector<float>) = "<<sizeof(vector<float>)<<endl;  
12     cout<<"sizeof(vector<bool>) = "<<sizeof(vector<bool>)<<endl;  
13     cout<<"sizeof(vector<string>) = "<<sizeof(vector<string>)<<endl;  
14 }  

输出:

1 sizeof(vector<char>) = 20  
2 sizeof(vector<int>) = 20  
3 sizeof(vector<short>) = 20  
4 sizeof(vector<double>) = 20  
5 sizeof(vector<long>) = 20  
6 sizeof(vector<float>) = 20  
7 sizeof(vector<bool>) = 28  
8 sizeof(vector<string>) = 20  
9 请按任意键继续. . .  

解释:
vector应该是从堆上分配内存,所有大小与元素个数无关

sizeof(vector)取决于vector类的具体实现,STL是个完全开放的东西,谁都可以来实现vector类。

通过查看STL源码可以看到vector有四个成员变量 
_A   allocator; 
iterator   _First,   _Last,   _End; 

每个指针是4个字节,因此16字节。20字节的是不是添加了什么指针呢


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++时间类型详解(time_t和tm)发布时间:2022-07-18
下一篇:
S3C2440UART之FIFO发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap