替代 vector<bool>
正如(希望如此)我们都知道的那样,vector
完全被破坏,不能被视为 C 数组.获得此功能的最佳方法是什么?到目前为止,我想到的想法是:
As (hopefully) we all know, vector<bool>
is totally broken and can't be treated as a C array. What is the best way to get this functionality?
So far, the ideas I have thought of are:
- 改用
vector
,或 - 使用包装类并具有
vector
你们是如何处理这个问题的?我需要 c_array()
功能.
How do you guys handle this problem? I need the c_array()
functionality.
作为一个附带问题,如果我不需要 c_array()
方法,如果我需要随机访问,解决这个问题的最佳方法是什么?我应该使用双端队列还是其他什么?
As a side question, if I don't need the c_array()
method, what is the best way to approach this problem if I need random access? Should I use a deque or something else?
- 我确实需要动态调整大小.
- 对于那些不知道的人,
vector
是专门的,因此每个bool
占用 1 位.因此,您无法将其转换为 C 风格的数组. - 我想包装器"有点用词不当.我在想这样的事情:
- I do need dynamic sizing.
- For those who don't know,
vector<bool>
is specialized so that eachbool
takes 1 bit. Thus you can't convert it to a C-style array. - I guess "wrapper" is a bit of a misnomer. I was thinking something like this:
当然,由于可能的对齐问题,我必须读入 my_bool
:(
Of course, then I have to read into a my_bool
due to possible alignment issues :(
struct my_bool
{
bool the_bool;
};
vector<my_bool> haha_i_tricked_you;
推荐答案
使用 std::deque
如果你不需要数组,是的.
Use std::deque
if you don't need the array, yes.
否则使用不专门用于 bool
的替代 vector
,例如 Boost 容器.
Otherwise use an alternative vector
that doesn't specialize on bool
, such as the one in Boost Container.
相关文章