繁体   English   中英

std :: vector <bool> 优化实施

[英]std::vector<bool> optimization implementation

文档中 ,我可以看到std::vector<bool>通过使每个布尔值占据一位来优化空间效率。 从文档中:

实现方式定义了std :: vector空间高效的方式(以及是否对其进行了优化)。

这是否意味着它取决于编译器的实现? 如果支持,我在哪里可以检查我的编译器是否支持它? 他们为什么不希望它得到支持? 这似乎是一个非常简单有效的实现。

如果不是,那是什么意思,如果我希望进行此优化意味着什么?

我正在使用TDM GCC工具集。

定义的实现意味着它取决于构成抽象机参数的内容。 (即,定义主机操作系统的算法,其实现规范和系统调用)。 一个信息Q&A是什么“实施规定”的意思是在这里

如果您有一台具有现代编译器/ IDE的现代计算机,则它很可能支持实现定义。

如果编译器不支持它,那不可能是因为他们不希望它,而是因为它是一个非常老的编译器,或者是一个资源非常有限的机器。

归结为取决于机器。 因此不同的操作系统将按照自己的方式来完成此任务。 (即32位和64位等)。除非使用(很多)较旧的编译器,否则它不会影响可移植性。 您可以检查编译器版本的规范(如果有问题),可以通过搜索编译器及其版本轻松地在网上找到。

正式的语言定义不希望排除合理的实现,因此,它们总是必须谨慎一些。

例如,典型的调试版本仍符合标准,但是我很可能看到vector<bool>没有在调试模式下被压缩。

现在这不是未指定的,而是实现的定义 这意味着它是否已压缩的事实应该在编译器文档中的某个地方,但是标准没有描述文档的组织方式。

如果您的编译器不支持您的意愿,则可以使用另一个库(Boost是显而易见的候选者)。 vector<bool>通常不是依赖于深层编译器魔术的类,因此替代方法很容易编写。

它是依赖于实现的,而不是可移植的。 似乎有一些设计缺陷,您应该避免使用vector<bool> 您可以从Meyers的“有效STL,项目18”中获得更多详细信息。

如果您确实关心空间效率,则可以改用std::bitset

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM