是否有一种替换C风格的Bool数组的标准方法
Is there a standard way to replace a C-style bool array?
在这段代码中
void legacyFunction(int length, bool *bitset)
{
// stuff, lots of stuff
}
int main()
{
int somenumber = 6;
// somenumber is set to some value here
bool *isBitXSet = new bool[somenumber];
// initialisation of isBitXSet.
legacyFunction(somenumber, isBitXSet);
delete[] isBitXSet;
return 0;
}
我想用
之类的东西替换bool *isBitXSet = new bool[somenumber];
std::vector<bool> isBitXset(somenumber, false);
,但我不能做
legacyFunction(somenumber, isBitXSet.data());
因为data()
不存在std::vector<bool>
。而且我无法更改legacyFunction()
的接口。
是否有c风格的布尔数组的替代方法?
您可以使用std::unique_ptr<T[]>
和std::make_unique
:
int main()
{
int somenumber = 6;
// somenumber is set to some value here
auto isBitXSet = std::make_unique<bool[]>(somenumber);
// initialisation of isBitXSet.
legacyFunction(somenumber, isBitXSet.get());
return 0;
}
另外,您可以通过创建自己的bool
包装器来"欺骗" std::vector
:
struct my_bool { bool _b; };
std::vector<my_bool> v; // will not use `vector<bool>` specialization
如果您在编译时知道阵列的大小,请考虑使用std::array
。
相关文章:
- Qt VTK交互风格的信号到小部件
- 写入向量<向量<bool>>
- 我可以使用条件运算符初始化C风格的字符串文字吗
- Visual Studio 2019:插入多个C++风格的单行注释
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 让bool方法返回其他整数
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- Arduino-C++ bool 不会从 false 变为 true
- 为什么在这种情况下,bool 类型的输出等于 0?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 错误:不能使用"显式"说明符声明 bool'
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 重载运算符<<采用谷歌 C++ 风格
- C++许多 SFINAE 风格的过载
- 从标准::字符串到标准::矢量<bool>的快速转换
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 为什么使用Pool和Bool而不是int8_t或char
- 如何为地图< map<int,int> 、bool > 分配值?
- 是否有一种替换C风格的Bool数组的标准方法