Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c+上存储数据而不占用大量空间+; 我使用C++,我需要存储6个布尔数据,而不超过8位空间使用。我需要使用类似数组的东西(向量、数组、矩阵等)来存储它们。有些方法,如vector,使用的数据比它的元素多。我需要在数据存储上保存,我应该使用哪种方法?_C++_Arrays_Vector_Storage_Bitset - Fatal编程技术网

如何在c+上存储数据而不占用大量空间+; 我使用C++,我需要存储6个布尔数据,而不超过8位空间使用。我需要使用类似数组的东西(向量、数组、矩阵等)来存储它们。有些方法,如vector,使用的数据比它的元素多。我需要在数据存储上保存,我应该使用哪种方法?

如何在c+上存储数据而不占用大量空间+; 我使用C++,我需要存储6个布尔数据,而不超过8位空间使用。我需要使用类似数组的东西(向量、数组、矩阵等)来存储它们。有些方法,如vector,使用的数据比它的元素多。我需要在数据存储上保存,我应该使用哪种方法?,c++,arrays,vector,storage,bitset,C++,Arrays,Vector,Storage,Bitset,如果您希望仅使用8位(1字节)存储6个布尔,则只能手动将它们存储在无符号字符中 这是一个如何使用它的片段: #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 (bi

如果您希望仅使用8位(1字节)存储6个布尔,则只能手动将它们存储在无符号字符中std::bitset()存储位数据包,但以4字节为增量,存储1个字节将有3个字节的开销。

您可以使用
std::bitset
()要仅存储每布尔一位,或者可以使用定义为在内部使用每布尔一位的
std::vector

如果不能使用超过8位,则可以使用
字符。您可以将每一位用作布尔值-1(如果为真),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;

等…

可以使用BITSET类(C++标准库)。< /P> 这是一个如何使用它的片段:

#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";
  }
}
#包括
#包括
int main(int argc,char*argv[]){
std::位集位数组;//[0,0,0,0,0]
bitarray.set(3,true)/[0,0,0,1,0,0]
如果(bitarray.test(3)=true){//是的!

Std::CUT使用它不是C++,但它使用的空间较小,只使用“代码”> char < /代码>,你只使用8位。在我看来,这是不可能的,因为所有的东西都少于至少8位的内部对齐。你认为CKRuZek……我希望我能找到一种存储少于8位的方法。实际上它是SO。Undt完全在C++中。所有的计算机机会对我来说都很好。BIT集是在元素的数量上被模板化的,如何将向量定义为内部的位集?好,不是比特集,而是“每BoL一个比特”。但是向量本身是否使用额外的数据,期望它的元素?Vector(6)只使用6位?谢谢你的位集我会搜索的it@user6551379位集以4字节增量存储位。sizeof(std::位集)==4,你也不知道这是一个糟糕且容易出错的解决方案,当std::bitset可用时。@Borgeader我对std::bitset不熟悉,thx.BTW,如果不能使用std::bitset-这仍然是一个糟糕的解决方案吗?什么|=和&=意味着,我在谷歌上搜索了它,但找不到任何东西?顺便说一句,它看起来是一个不错的解决方案way@user6551379这些是按位o操作。my_bool |=4应将第3位变为1,my_bool&=0b11111011应将其变为0BTW,位操作往往会降低处理器的性能。处理器喜欢使用其字大小(16位、3位、64位等)。当被告知使用非常规大小(如6位或24位)时,他们会感到不安。当处理器使用8位时效率更高,尝试仅使用6位确实没有任何好处(浪费2位不是犯罪,可能会加快执行)。就内存空间而言,大多数应用程序都不会注意到(1 GB中浪费2位是什么?)。所以,要逐位存储6位,我需要提供24位的存储空间?如果这是真的,那么没有更节省的方法吗?@user6551379您可以使用单个无符号字符(1字节)在1字节中存储6位并且自己编写所有函数。如果您想使用标准库,将有开销。
std::vector
在我看来并不推荐。
std::bitset
是更好的选择。