我可以在C++获得非特化的载体<bool>类型吗?
Can I get an unspecialized vector<bool> type in C++?
vector<bool>
专门用于减少空间消耗(每个元素 1 位),但它的访问速度比 vector<char>
慢。有时我出于性能原因使用vector<char>
,但是如果我将char
转换为bool
,我的编译器(Visual C++)可能会生成我不喜欢的C4800警告。
另外,我认为如果我将其视为非专业vector<bool>
,则该vector<char>
在语义上是错误的。那么,我可以在C++中获得真正的非专业vector<bool>
类型吗?
不,你不能得到一个不专业的std::vector<bool>
.
vector<char>
是你最好的选择,因为你已经弄清楚了。要绕过警告,只需使用 bool 表达式:
bool b1 = v[0] != 0;
bool b2 = !!v[0];
或者,创建自定义布尔类:
class Bool
{
public:
Bool(){}
Bool(const bool& val) : val_(val) {}
inline Bool& operator=(const bool& val) { val_ = val; }
operator bool() const { return val_; }
private:
bool val_;
};
。
vector<Bool> bvec;
bvec.push_back(false);
bvec.push_back(true);
bool bf = bvec[0];
bool bt = bvec[1];
相关文章:
- 写入向量<向量<bool>>
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 让bool方法返回其他整数
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- Arduino-C++ bool 不会从 false 变为 true
- 为什么在这种情况下,bool 类型的输出等于 0?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 错误:不能使用"显式"说明符声明 bool'
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 从标准::字符串到标准::矢量<bool>的快速转换
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 为什么使用Pool和Bool而不是int8_t或char
- 如何为地图< map<int,int> 、bool > 分配值?
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 使用 bool 和 const char 重载的 C++ 函数会在没有警告的情况下产生歧义 (MSVC2012)
- 返回 bool 作为 CPP 中 bool 运算符 [] 中的值