我使用 memcpy 将 std:vectors 的内容复制到原始数组。对于 int、float、double 等数据类型,它运行良好。当我开始复制布尔向量时,我遇到了一个问题,即我得到了奇怪的值。
首先,我开始为浮点向量进行测试输出:
std::vector<float> test1 (3,0);
cout << "Sizeof test1[0] : " << sizeof(test1[0]) << endl
<< "Memoryaddress 0: " << &test1[0] << endl
<< "Memoryaddress 1: " << &test1[1] << endl
<< "Memoryaddress 2: " << &test1[2] << endl;
输出是:
Sizeof test1[0]: 4
Memoryaddress 0: 02793820
Memoryaddress 1: 02793824
Memoryaddress 2: 02793828
这就是我所期望的。浮点大小为 4 字节,到下一个浮点值的距离为 4 字节。当我对 bool 执行此操作时,输出如下所示:
std::vector<bool> test (3,0);
cout << "Sizeof test[0]: " << sizeof(test[0]) << endl
<< "Memoryaddress 0: " << &test[0] << endl
<< "Memoryaddress 1: " << &test[1] << endl
<< "Memoryaddress 2: " << &test[2] << endl;
输出是:
Sizeof test[0]: 16
Memoryaddress 0: 011EF94C
Memoryaddress 1: 011EF93C
Memoryaddress 2: 011EF92C
为什么bool的大小是16字节?对我来说这似乎完全是矫枉过正。对此有解释吗?
与其他专业不同的是vector
, vector<bool>
不管理动态数组bool
对象。相反,它应该将布尔值打包到每个位中。
由于各个位不可寻址,test[0]
不能简单地作为参考bool
。相反,它是一个类类型vector<bool>::reference
可以转换为bool
(获取值),并分配自bool
(修改向量元素)。
这意味着vector<bool>
不完全满足标准容器的要求,如果您需要对其元素的引用或指针,则无法使用。如果您确实需要具有可寻址元素的“真实”容器,请考虑vector<char>
or deque<bool>
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)