vector大小问题

slg_sparkler 2008-04-09 10:52:02
#include<vector>
#include<iostream>
using namespace std;

void main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
v.push_back(5);
v.push_back(6);
cout<<sizeof(v)<<endl;
system("pause");
}

这段程序为什么输出20呢? 想知道vector变量v此时到底占多大空间?
vector所占的空间数是怎么决定的呢?
...全文
781 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
鸵鸟 2009-09-25
vector 内的元素在heap上
你sizeof(v), 的到的是栈里面几个迭代器的大小
回复
mars_man 2009-09-12
vector只是是容器,或者说管理工具
回复
guanxi1983 2009-07-26
我也觉得用v.size()挺好的
回复
CRKAKASSI 2009-07-26
顶阿荣~~
vector的size 和它包含数据的size是两个概念
回复
komai908 2009-07-25
#include <vector>
#include <iostream>
using namespace std;

void main()
{
vector <int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
v.push_back(5);
v.push_back(6);
cout < <sizeof(v) < <endl; // 建议这一行改一下 cout << v.size() << endl ;
system("pause");
}


这是你想要的效果吗 ?
回复
edgyailit 2009-07-25
32900
回复
iGoo 2008-04-30
[Quote=引用 7 楼 liutaoking 的回复:]
顶二楼,vector是用来管理动态数组,若想得到数组中存储数据的大小得利用vector中的size(),
可参考http://www.vckbase.com/document/viewdoc/?id=844
[/Quote]

顶我干嘛聂,事实嘛~~vector内存的分配和size没有关系,人家只不过先预分配内存,使得你在下几次push_back时不需要再次new
回复
arong1234 2008-04-11
假如我们用下面结构表示包含多个元素的数组


typedef struct{
int count ;//元素个数
int *pData; //存储元素的数组指针
} MyData;
sizeof(MyData)永远返回8,和你pData到底指向多少个元素无关,这和sizeof(vector)是道理一样的
回复
arong1234 2008-04-11
这当然无关。sizeof计算的是vector这个类型的大小,你内部就是0个元素,其大小都是有的,这个大小固定,不会随元素格式增加而增加。这和sizeof(char*)用于等于4一样

[Quote=引用 5 楼 iihero 的回复:]
sizeof 一个vector对像,似乎与具体的实现有关。
[/Quote]
回复
liutaoking 2008-04-11
顶二楼,vector是用来管理动态数组,若想得到数组中存储数据的大小得利用vector中的size(),
可参考http://www.vckbase.com/document/viewdoc/?id=844
回复
boabc2304 2008-04-11
[Quote=引用 2 楼 slg_sparkler 的回复:]
vector内部是按照链表实现还是数组实现的啊?
[/Quote]
记得 vector 是按数组实现的吧
回复
iihero 2008-04-11
sizeof 一个vector对像,似乎与具体的实现有关。
回复
yydrewdrew 2008-04-09
请看侯捷的《池内春秋》
回复
medie2005 2008-04-09
想了解STL的底层实现?看侯捷的《STL源码剖析》。
回复
slg_sparkler 2008-04-09
vector内部是按照链表实现还是数组实现的啊?
回复
iGoo 2008-04-09
vector不是每push_back一次就分配一次空间的,当你push_back第一个元素时他会一次分配
一块足够大的内存以供后续存储,当容量不够时vector会再次分配2倍数量的内存。

另外sizeof不能够准确测量出vector元素的个数,因为vector里面有成员变量
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-09 10:52
社区公告
暂无公告