zoukankan      html  css  js  c++  java
  • 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呢?还需要自己深入探索再来揭示答案。 

  • 相关阅读:
    201006120100630
    2010080120100901
    20101120至20101220
    201155学习总结
    PublishReport.rss
    windowservice创建及部署
    提示要角色管理工具安装Microsoft .NET Framework 3.5
    部署SSIS包
    ETL及SSIS
    IbatisNet
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13166481.html
Copyright © 2011-2022 走看看