C++ STL中vector操作的.size和sizeof区别
在使用vector时,涉及到了统计vector的元素个数,本应该使用.size(),但一开始由于记错用法了,犯了个很低级的错误,竟然使用了sizeof。后来竟然发现一个奇妙的地方。int型数据的大小是4,本以为会输出10和40,或者是10和4,但事实输出的是10和16!!!
1 ector<int> res_int1(10, 1); 2 cout << res_int1.size() << " " << sizeof(res_int1) << endl;
然后调整了一下元素的个数,继续探索。这次的输出,100和16。
1 vector<int> res_int2(100, 1); 2 cout << res_int2.size() << " " << sizeof(res_int2) << endl;
接下来调整了一下数据类型,继续探索。这次的输出也是10和16。
1 vector<char> res_char(10, 'a'); 2 cout << res_char.size() << " " << sizeof(res_char);
由此可以看出:sizeof()的结果和vector里面元素的个数无关。
然后换了布尔类型,又发现奇妙的地方。这次的结果不是10和16,而是10和24!!!!!
1 vector<bool> res_bool(10, true); 2 cout << res_bool.size() << " " << sizeof(res_bool);
为什么有的类型是16,有的是24 ??
sizeof()运算符的值在编译时即计算好,它的功能是获取所建立的最大对象的字节大小,由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。而vector动态分配内存,所以应该是从堆上获取内存,所以vector的大小与元素个数无关。
vector容器包含三个指针:_First, _Last, _End,如果再算上 iterator的话,4*4=16。
但是为什么有的是24呢?还需要自己深入探索再来揭示答案。
分类:
编程语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!