C++:STL vector:sizeof(vector) (转载)

原文地址: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字节的是不是添加了什么指针呢

时间: 2024-10-22 19:04:23

C++:STL vector:sizeof(vector) (转载)的相关文章

108次练习之模拟实现STL中的Vector(一)

之前敲过很多遍的Vector就不算了,从现在开始,每次将敲过的次数记下来,直至108遍为止.(瑜伽做108遍拜日,在此借助瑜伽的思想) 为什么要敲这么多次?借助NLP中的一句话:最基础的就是最精华的! 为什么偏偏要敲108遍?借助瑜伽中108遍拜日的思想. 本文仅供个人学习,总结..... 废话不多说...开干! /* *文件说明:模拟STL的Vector相关声明及实现(第1遍) *作者:高小调 *日期:2016-12-18 *集成开发环境:Microsoft Visual Studio 201

STL中的Vector相关用法

STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int>是一种数据类型. Vector的存储空间是连续的,list不是连续存储的. 1. 定义和初始化 vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5;//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被

c++ STL中的vector与list为什么没有提供find操作?

map里有,set里也有,vector,list没有,太不公平了吧. 其实应该考虑为什么map,set里有find操作. include<algorithm>里有通用的find操作,通用的find内部是从begin到end进行一次遍历,复杂度是O(n). 通过iterator从begin到end遍历map与set时,得到的结果是按key排序的结果,而不是插入时的顺序(所以这两个容器没有push_back操作), 其实,insert到map与set中的元素会被组织到一颗红黑树上,红黑树是一颗平衡

STL review:vector &amp; struct

I.vector 1.头文件:#include<vector>                        //容器vector是一个能实现随机存取.插入删除的动态数组,还可以当栈使. 2.创建: vector<int> v1:                             // < >里可以是struct或者vector嵌套:vector< vector<int> > ivec; vector是一个类模板,创建一个vector的过程

【STL基础】vector

vector 构造函数: //default: vector<T> v; //空的vector //fill: vector<T> v(n); //n个元素的vector,元素默认初始化 vector<T> v(n, value); //n个元素值为value的vector //range: vector<T> v(first, last); //两个迭代器之间的元素构成的vector vector<T> v(arr, arr + sizeof(

STL源代码学习--vector用法汇总

一.容器vector 使用vector你必须包含头文件<vector>: #include<vector> 型别vector是一个定义于namespace std内的template: [cpp] view plaincopyprint? template<class _Ty, class _Ax = allocator<_Ty> > 第二个參数定义内存模型. 我们一般採用默认的内存模型. 二.vector的功能 vector模塑出一个动态数组.vector

初探STL容器之Vector

vector 特点: 1.可变长的动态数组 2.使用时包含头文件 #include <vector> 3.支持随机访问迭代器 ? 根据下标随机访问某个元素时间为常数 ? 在尾部添加速度很快 ? 在中间插入慢 成员函数 初始化 vector(); 初始化成空 vector(int n); 初始化成有n个元素 vector(int n, const T & val); 初始化成有n个元素, 每个元素的值都是val,类型是T vector(iterator first, iterator l

C++STL中的vector

vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说:vector是一个能够存放任意类型的动态数组,能够增加和压缩数据. 使用vector容器之前必须加上<vector>头文件:#include<vector>; vector属于std命名域的内容,因此需要通过命名限定:using std::vector;也可以直接使用全局的命名空间方式

转:用STL中的vector动态开辟二维数组

用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int main(){ int m, //行数     n; //列数 cout << "input value for m,n:"; cin>>m>>n;  //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认