【问题标题】:How does vector<bool> deal with references and iterators?vector<bool> 如何处理引用和迭代器?
【发布时间】:2012-12-30 14:19:07
【问题描述】:

我们可能都知道 C++ 98 vector&lt;bool&gt; 专门化将布尔值存储为位而不是布尔变量。 vector&lt;bool&gt; 的元素不可寻址,因为 C++ 没有指向位的指针和引用,是否有解决方法,任何明显的陷阱(我似乎没有注意到)并且是甚至尝试这样做是否可行?

【问题讨论】:

标签: c++ boolean stdvector proxy-classes bitvector


【解决方案1】:

vector&lt;bool&gt; 的元素与任何其他 vector 的元素一样可寻址,例如与operator []。但是,由于内存压缩,操作会变慢。

也许更快的实现将使用您自己的内存实现并使用二进制移位来处理特定的布尔值。

另外一种选择是在适当的地方使用简单的数组。请记住,您可以使用 new 运算符动态分配它。

EDIT 可能会找到替代实现,例如在this thread

【讨论】:

  • 您列出了一个陷阱,因为它速度较慢且有替代方案,我知道替代方案,我只是想看看是否有某种方法可以直接使用它。我隐约记得在某处读过关于参考的文章,这是一个嵌套类,但我似乎在上面找不到任何东西。
  • @iKlsR 您可以直接使用它,正如我在回答中已经指出的那样。您还可以寻找替代实现,例如这里:stackoverflow.com/questions/670308/alternative-to-vectorbool
  • 我似乎在摸索我的话,感谢额外的链接,我想到的是cplusplus.com/reference/vector/vector-bool/reference,这似乎可行,但我不确定比(默认[ ]) 就是这样。
  • @iKlsR 你对什么样的操作感兴趣?
  • 可以迭代并且您可以使用std::vector&lt;bool&gt;::reference作为“代理”参考。有关示例,请参见 liveworkspace.org/code/1gNZ5O$0
【解决方案2】:

vector&lt;bool&gt; 使用带有重载运算符的包装器对象,而不是对位的引用/指针,这些运算符的行为(在大多数情况下)类似于布尔值的引用/指针。

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2021-03-04
    • 2011-04-12
    • 2015-10-24
    • 1970-01-01
    相关资源
    最近更新 更多