首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::vector<bool>优化实现

std::vector<bool>优化实现
EN

Stack Overflow用户
提问于 2016-07-11 04:54:11
回答 3查看 1.7K关注 0票数 8

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

定义了std::向量的空间效率(以及它是否被优化)的实现方式。

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

如果不是,这意味着什么?如果我想要进行优化,这意味着什么?

我正在使用TDM GCC工具集。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-11 07:40:29

形式语言定义不想排除合理的实现,所以它们总是要谨慎一点。

例如,一个典型的调试构建仍然符合标准,但我很可能看到一个vector<bool>没有在调试模式中被压缩。

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

如果您的编译器不像您想要的那样支持它,您可以只使用另一个库(Boost是明显的候选库)。vector<bool>通常不是一个依赖于深度编译器魔力的类,因此可以很容易地编写替代方案。

票数 2
EN

Stack Overflow用户

发布于 2016-07-11 06:14:54

实现定义的意味着它取决于抽象机器的构成参数。(即定义主机操作系统的算法、它们的实现规范和系统调用)。关于“实现定义”意味着什么的信息问答是这里

更有可能的是,如果您有一台具有现代编译器/IDE的现代机器,那么它支持实现定义。

如果编译器不支持它,那不太可能是因为他们“不想要”它,而是因为它要么是一个非常老的编译器,要么是一台资源非常有限的机器。

归根结底,它是依赖于机器的;因此不同的操作系统将以自己的方式处理它。(即32位对64位等)它不会影响可移植性,除非使用(非常多的)旧编译器。如果需要检查编译器版本的规范,则可以检查它,通过搜索编译器及其版本,可以轻松地在网上找到它。

票数 3
EN

Stack Overflow用户

发布于 2016-07-11 05:28:34

它是依赖于实现的,不是可移植的。它似乎有一些设计缺陷,您应该避免使用vector<bool>。你可以从迈尔斯的“有效STL,第18项”获得更多细节。

如果你真的关心空间效率,你可以用std::bitset代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38299399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档