Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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+;中管理位/二进制文件+;?_C++_Text_Input_Char_Boolean - Fatal编程技术网

C++ 如何在c+;中管理位/二进制文件+;?

C++ 如何在c+;中管理位/二进制文件+;?,c++,text,input,char,boolean,C++,Text,Input,Char,Boolean,我需要做的是打开一个0和1的文本文件来查找文件中列之间的模式 所以我的第一个想法是将每一列解析成一个大的布尔数组,然后在列之间进行逻辑运算(现在是在数组中)。直到我发现bool的大小实际上是一个字节而不是一点点,所以我会浪费1/8的内存,将每个值分配给bool 它是否与800x800值的网格相关?处理这个问题的最佳方法是什么? 如果是一个复杂的答案,我会非常感激一段代码。你可以使用std::vector,这是一种特殊的向量,它使用压缩存储来存储布尔值…1位而不是8位。对于这种大小的网格,布尔值数

我需要做的是打开一个0和1的文本文件来查找文件中列之间的模式

所以我的第一个想法是将每一列解析成一个大的布尔数组,然后在列之间进行逻辑运算(现在是在数组中)。直到我发现bool的大小实际上是一个字节而不是一点点,所以我会浪费1/8的内存,将每个值分配给bool

它是否与800x800值的网格相关?处理这个问题的最佳方法是什么?
如果是一个复杂的答案,我会非常感激一段代码。你可以使用
std::vector
,这是一种特殊的向量,它使用压缩存储来存储布尔值…1位而不是8位。

对于这种大小的网格,布尔值数组大约是640KB。这取决于你有多少内存,如果这将是一个问题。对于逻辑分析代码来说,这可能是最简单的


通过将位分组并存储在int数组中,您可以将内存需求降低到80KB,但逻辑代码会更复杂,因为您总是要隔离要检查的位。

我想是Knuth说的“过早优化是万恶之源”。让我们进一步了解这个问题。您的数组是800**2==640000字节,这对于任何比数字手表更强大的东西来说都没有什么大不了的

虽然将其存储为字节可能看起来很浪费——正如您所说,7/8的内存是冗余的——但另一方面,大多数机器的位操作效率不如字节;通过节省内存,您可能会浪费大量精力进行屏蔽和测试,因此使用字节模型会更好

另一方面,如果你想用它来寻找更大的模式,你可能想用位表示法,因为你一次可以用8位来做事情

这里真正的问题是有几种可能性,但没有人能在不知道问题所在的情况下告诉您“正确”的表示法。

您可以使用或增强,它们提供不同的方法来帮助您管理位

例如,它们支持从其他默认类型(如int或char)创建位集的构造函数。您还可以将位集导出为ulong或字符串(然后可以再次转换为位集等)


我曾经问过如何连接这些,这在性能上是不可能做到的。但也许你也可以在其中使用这些信息。

你几乎肯定是在过早地优化——我真的只想编写算法,然后在必要时进行增量更改以提高性能。到目前为止,你做了什么?你走了多远,遇到了什么问题?你有什么问题?(或者你想让我们为你写这一切吗?)嗨,谢谢你的快速回答!我还没有写任何代码,我只是提前计划,但正如大多数人所说,我肯定是过早地优化了,因为这是一个将在现代计算机上运行的程序。我遇到的其他问题是生成模式的方式,基本上我需要生成一个模式,然后应用(xnor)或者=只是为了看看它是否有关于专栏的命中或未命中,我正在考虑使用基本的trig,如sin或cos,但不知道如何将它们变成位模式,但我认为这是另一个问题…谢谢,我相信这回答了我的问题。。。但最后我似乎都不需要它了,哈哈,谢谢你的评论。正如你所说,我正在进行过早的优化,因为它可以在“比数字手表更强大的任何东西”上运行,只是我似乎浪费了很多空间,但我也不知道pc处理字节的效率比位更高,所以我认为,加上更简单的实现抵消了内存冗余的“问题”谢谢,我也想到了这一点,也许把8个值分组成一个字符,但是对于像我这样的noob来说实现起来更难,现在我知道这样做的好处是不值得的