如何在不使用c ++的空间的情况下存储数据

时间:2016-07-05 12:16:26

标签: c++ arrays vector storage bitset

我正在使用c ++,我需要存储6个布尔数据,而不会超过8位空间使用量。我需要使用类似数组的东西(矢量,数组,矩阵等)来存储它们。像vector这样的方法使用的数据量远远超过它的元素。我需要节省数据存储,我应该使用哪种方法?

4 个答案:

答案 0 :(得分:0)

如果要仅使用8位(1字节)存储6个bool,则只能手动将它们存储在unsigned char中。 std::vector<bool>std::vector bool)确实使用位打包来存储bool,但它在其他成员和虚函数中增加了大约20个字节的开销。 std::bitsetstd::bitset)存储位数据包但以4字节为增量,您将有3个字节的开销来存储1个字节。

答案 1 :(得分:0)

您可以使用std::bitsethttp://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;

依旧......