【发布时间】:2010-10-14 19:02:59
【问题描述】:
正如(希望)我们都知道,vector<bool> 已完全损坏,不能被视为 C 数组。获得此功能的最佳方法是什么?
到目前为止,我想到的想法是:
- 改用
vector<char>,或者 - 使用包装类并拥有
vector<bool_wrapper>
你们如何处理这个问题?我需要c_array() 功能。
作为一个附带问题,如果我不需要 c_array() 方法,如果我需要随机访问,解决此问题的最佳方法是什么?我应该使用双端队列还是其他什么?
编辑:
- 我确实需要动态调整大小。
- 对于那些不知道的人,
vector<bool>是专门的,因此每个bool占用 1 位。因此,您不能将其转换为 C 样式的数组。 - 我猜“包装”有点用词不当。我在想这样的事情:
当然,由于可能的对齐问题,我必须阅读my_bool :(
struct my_bool
{
bool the_bool;
};
vector<my_bool> haha_i_tricked_you;
【问题讨论】:
-
有什么理由不使用... C 风格的数组吗?
-
rlbond,你需要动态尺寸吗?
-
好吧,我来咬一口 - 为什么你认为 vector 是“完全坏掉的”?
-
@Andrew Grant - 见open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2160.html
-
有趣的是,
vector<bool>只是在我的代码中引起了数据竞争错误,因为我希望不同的线程能够安全地同时修改向量中的不同元素。使用deque<bool>解决。