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呢?还需要自己深入探索再来揭示答案。