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所占的空间数是怎么决定的呢?
...全文
839 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸵鸟 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里面有成员变量

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧