为啥两个向量的大小<bool> bVec = true,false,true,false,true;向量<char> cVec = 'a', 'b', 'c', 'd',

Posted

技术标签:

【中文标题】为啥两个向量的大小<bool> bVec = true,false,true,false,true;向量<char> cVec = \'a\', \'b\', \'c\', \'d\', \'e\' ;是不同的?【英文标题】:why the size of two vector<bool> bVec = true,false,true,false,true; vector<char> cVec = 'a', 'b', 'c', 'd', 'e' ; are different?为什么两个向量的大小<bool> bVec = true,false,true,false,true;向量<char> cVec = 'a', 'b', 'c', 'd', 'e' ;是不同的? 【发布时间】:2017-01-23 09:46:25 【问题描述】:
#include <iostream>
#include<vector>
using namespace std;
bool a;
char c;
int main() 

    vector<bool> bVec =  true,false,true,false,true;
    vector<char> cVec =  'a', 'b', 'c', 'd', 'e' ; 
    cout<<sizeof( bVec );cout<<endl;
    cout<<sizeof( cVec );
    cout<<endl;
    cout<<sizeof(a);
    cout<<endl;
    cout<<sizeof(c);

    return 0;

当我编译这段代码时,我得到 cVec 的大小为 20 和 bvec 的大小为 12 。但是为什么大小不一样?

【问题讨论】:

std::vector&lt; bool &gt; 是一种特殊的……动物。见***.com/questions/17794569/… 【参考方案1】:

std::vector&lt;bool&gt;std::vector 的一个特例,它以节省空间的方式存储数据并返回代理对象而不是bool&amp; 来操作数据。因此,它通常具有与普通 std::vector 不同的成员数据,因此存在大小差异。

【讨论】:

以上是关于为啥两个向量的大小<bool> bVec = true,false,true,false,true;向量<char> cVec = 'a', 'b', 'c', 'd', 的主要内容,如果未能解决你的问题,请参考以下文章

为啥析取赋值运算符 |= 不适用于布尔向量?

为啥 C++ 中的向量不会自动调整大小

为啥 C++ 标准向量在分配或调整大小时会出现段错误? [关闭]

为啥 C# 中 bool 数据类型的大小不是只有 1 位?

将向量归零的最快方法<vector<bool>>

为啥 short int 和 int 在 32 位架构中具有相同的大小?