我正在使用c ++,我需要存储6个布尔数据,而不会超过8位空间使用量。我需要使用类似数组的东西(矢量,数组,矩阵等)来存储它们。像vector这样的方法使用的数据量远远超过它的元素。我需要节省数据存储,我应该使用哪种方法?
答案 0 :(得分:0)
如果要仅使用8位(1字节)存储6个bool,则只能手动将它们存储在unsigned char中。 std::vector<bool>
(std::vector bool)确实使用位打包来存储bool,但它在其他成员和虚函数中增加了大约20个字节的开销。 std::bitset
(std::bitset)存储位数据包但以4字节为增量,您将有3个字节的开销来存储1个字节。
答案 1 :(得分:0)
您可以使用std::bitset
(http://en.cppreference.com/w/cpp/utility/bitset)每个bool只存储一位,或者您可以使用std::vector<bool>
定义在内部使用每个bool位。
答案 2 :(得分:0)
您可以使用bitset类(在C ++标准库中)。
这是一个如何使用它的片段:
#include <bitset>
#include <iostream>
int main(int argc, char* argv[]) {
std::bitset<6> bitarray; // [0,0,0,0,0,0]
bitarray.set(3, true) // [0,0,0,1,0,0]
if (bitarray.test(3) == true) { // Yeah is true!
std::cout << "The fourth bit is true\n";
}
}
这样你应该只使用6位。
答案 3 :(得分:-1)
如果您不能使用超过8位,则可以使用char
。您可以将每个位用作bool - 如果为true则为1,如果为false则为0:
char my_bool = 0;
if(condition_1 == TRUE)
my_bool |= 1;
else
my_bool &= 0b11111110;
if(condition_2 == TRUE)
my_bool |= 2;
else
my_bool &= 0b11111101;
if(condition_3 == TRUE)
my_bool |= 4;
else
my_bool &= 0b11111011;
依旧......