2017-09-14 113 views
0

所以基本上,我需要的是有28,800个值可以被索引访问,并且都可以设置为true或false。使用一个bool或整数数组不是一个选项,因为大小需要在rumtime期间使用参数进行设置。使用矢量速度太慢,内存密集。我是C++新手,因此对如何解决这个问题没有任何想法,任何人都可以提供帮助吗?在C++中创建一个巨大的国旗图

编辑:谢谢所有的人评论!就像我说的那样,我是C++编程的新手,你的回答确实帮助我理解了向量背后的功能。 因此,在所有人都说矢量不是很慢之后,我再次检查,结果发现我的程序运行速度很慢,因为我在填充矢量时遇到了另一个错误。但特别是midor的和一些程序员伙计的答案帮助我使程序运行速度比以前更快,所以谢谢!

+5

为什么使用一个矢量“速度太慢,内存密集”?什么是“太慢”?什么是“太记忆密集型”?你不会比'std :: vector '得到更少的内存密集度' – user463035818

+0

如果'std :: vector'太慢并且内存密集,恐怕这种方式无法保存。你需要将它们分页。 – Quentin

+0

矢量如何变慢?对于'std :: vector '有一个节省空间的专业化,而且还有'std :: bitset'具有固定的大小。 –

回答

5

使用矢量的方式太慢,内存密集。

C++专门为std::vector<bool>所以它只使用尽可能多的内存,因为它需要。每个“标志”一位(当然+记帐开销)。

如果您事先知道它的大小(您不会根据您的问题),或者您知道位图只包含极少的设置位(例如50'中的1位) 000,但你需要测量一个更复杂的实现是否值得)。对于稀疏的位图,存储设置位的std::unordered_set<std::uint32_t>可能是一个选项。

但28'800是一个非常小的数字,所以不要浪费你的时间在优化。你不会从中获得任何好处。