vector有多大?

psbeond 2010-12-20 01:52:36
vector<int> vValue;
int n = sizeof(vValue);
大家觉得n的值是多少?
...全文
766 66 打赏 收藏 转发到动态 举报
写回复
用AI写文章
66 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzPandazz 2010-12-22
  • 打赏
  • 举报
回复
看来我没看贴先入为主了
psbeond 2010-12-22
  • 打赏
  • 举报
回复
准备明天早上结贴了。看了这么多回复,很感谢大家,不过其中有很多回复者,完全没有理解size和sizeof的区别,所以,如果通过这个贴子,能让这些TX明白它们的区别,也是好事一件。上面所有回答动态增长的,都是没有理解的。
zanglengyu 2010-12-21
  • 打赏
  • 举报
回复
vector 有预留的 预留部分随size大小不同而不同
zzPandazz 2010-12-21
  • 打赏
  • 举报
回复
C#里的ArrayList应该和vector道理差不多,每次实际元素数量大于size时都会重新分配一块原数量*2的空间出来
hai040 2010-12-21
  • 打赏
  • 举报
回复
(sizeof(A)-sizeof(vector<int>))/sizeof(IUIVARINT)
因为对齐,所以sizeof(A)并不等于vector + iuivarint
用offsetof试试
offsetof(A, vValue) / offsetof(A, b)
flysnowhite 2010-12-21
  • 打赏
  • 举报
回复
初始空间视编译器不同而不同,最小为1,也有设20的;当数据超过vector存储范围时,一般是在原有空间基础上翻倍,动态增长。
liyaobinRyan 2010-12-21
  • 打赏
  • 举报
回复
标准库在vector定义时就会分配一个固定的长度,当该长度不够用时再动态扩张。
ddc 2010-12-21
  • 打赏
  • 举报
回复
除非所有程序都能保证相同编译器和编译环境,sizeof()才是固定的。
换个思路吧,不管多少个结构也是人手工敲的代码不是?麻烦他们多敲点,每个结构加个{enum fields=xx}
v_table 2010-12-21
  • 打赏
  • 举报
回复
20,我测过,无论pushbach多少
yfk 2010-12-21
  • 打赏
  • 举报
回复
根据编译器不同大小不一致
boo_qwer 2010-12-21
  • 打赏
  • 举报
回复
是滴 动态分配
bai_shou 2010-12-21
  • 打赏
  • 举报
回复
不要让容器超过4M。
csdn一绝 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 jikeyuan1 的回复:]
vector是STL容器,它的长度满足子增长的,LZ可以MSDN一下capacity(),size(),reserve()函数
vector的长度大致就可以了解啦 ,嘿嘿 ,多多指教 !!
[/Quote]
这个解释给楼主比较适合 看看STL
jikeyuan1 2010-12-21
  • 打赏
  • 举报
回复
vector是STL容器,它的长度满足子增长的,LZ可以MSDN一下capacity(),size(),reserve()函数
vector的长度大致就可以了解啦 ,嘿嘿 ,多多指教 !!
寂寞的泡面 2010-12-21
  • 打赏
  • 举报
回复
vector<int> iv;
cout<<sizeof(iv);
刚才试了,结果是20.
楼主看看stl源码剖析吧。
psbeond 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 h100037 的回复:]
(sizeof(A)-sizeof(vector<int>))/sizeof(IUIVARINT)
觉得你这样的处理方式不怎么好, 万一加了其他变量, 启不是又要改.
定义个常量好点
[/Quote]
我这个结构体,如果加数据,也一定是IUI_VARIANT类型的。不允许出现其它类型。
psbeond 2010-12-20
  • 打赏
  • 举报
回复
原始结构体:
struct CTRLPROPERTIES
{
CTRLPROPERTIES();
virtual ~CTRLPROPERTIES();

virtual LONG GetPropertyCount() const;
IUI_VARIANT *GetVariant(int nIndex);
const IUI_VARIANT *GetVariant(int nIndex) const;

IUI_VARIANT lStructSize;
IUI_VARIANT strType;
IUI_VARIANT strID;
IUI_VARIANT rect;
IUI_VARIANT bVisible;
IUI_VARIANT bDisabled;
IUI_VARIANT bTabStop;
IUI_VARIANT eHorLayoutMode;
IUI_VARIANT eVerLayoutMode;

IUI_VARIANT bCanBackgroundStateChange; // FALSE: The highlight, selected and disabled background image use normal background image.
IUI_VARIANT bSpecifyBackgroundImages;
IUI_VARIANT bCombineBackgroundImages;
IUI_VARIANT strBKCombine;
IUI_VARIANT strBKN;
IUI_VARIANT strBKH;
IUI_VARIANT strBKS;
IUI_VARIANT strBKD;


IUI_VARIANT lfN;
IUI_VARIANT bHSameNFont; // the font of Highlight state same to normal
IUI_VARIANT lfH;
IUI_VARIANT bSSameNFont;
IUI_VARIANT lfS;
IUI_VARIANT bDSameNFont;
IUI_VARIANT lfD;

IUI_VARIANT crN;
IUI_VARIANT bHSameNColor;
IUI_VARIANT crH;
IUI_VARIANT bSSameNColor;
IUI_VARIANT crS;
IUI_VARIANT bDSameNColor;
IUI_VARIANT crD;
};

struct UIWNDPROPERTIES : public CTRLPROPERTIES
{
UIWNDPROPERTIES ();
virtual ~UIWNDPROPERTIES();

IUI_VARIANT bClipChildren;
IUI_VARIANT bClipSiblings;
IUI_VARIANT bNoActivate;
IUI_VARIANT bAppWindow;
IUI_VARIANT bTopmost;
IUI_VARIANT bAcceptFiles;
IUI_VARIANT lTitleBarHeight; // -1: All area of window can be drag to move; 0: window can't be moved; >0: the height of title bar.
IUI_VARIANT strBKNo;

//
IUI_VARIANT bUseMaskColor;
IUI_VARIANT crMask;

//
IUI_VARIANT bResize;
IUI_VARIANT ptResize;

//
IUI_VARIANT eWindowType;
IUI_VARIANT rcClientArea; // can auto resize by windows resizing relative to ptResize.

std::vector<CTRLPROPERTIES *> vControls;
};

其中IUI_VARIANT 是从_variant_t派生的类。sizeof(IUI_VARIANT)的值为96.
psbeond 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 jackyjkchen 的回复:]
引用 34 楼 psbeond 的回复:
struct A
{
IUIVARIANT a;
IUIVARIANT b;
IUIVARIANT c;
IUIVARIANT d;
...
vector<int> vValue;
};

sizeof(A),在release和debug下值相同,但sizeof(vector<int>)值不同,很诡异。 vc2008


应该是……
[/Quote]

这个不诡异。这个明显是对齐。但我的,是同一个结构体。如果是8字节对齐的话,但sizeof(vector<int>)却是20,就没有按8字节对齐。
务实的幻想家 2010-12-20
  • 打赏
  • 举报
回复

未定义,取决于vector的具体实现,但同一个stl库中vector的size
cmlr_ 2010-12-20
  • 打赏
  • 举报
回复
编译器实现的, vc是16, gcc是12, 我估计有三个成员变量:
size, capacity, *p_data
加载更多回复(42)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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