C++ 有没有标准的方法来替换C型布尔数组?
在这段代码中C++ 有没有标准的方法来替换C型布尔数组?,c++,arrays,boolean,std,C++,Arrays,Boolean,Std,在这段代码中 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.
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=newbool[somenumber]代码>通过类似
std::vector<bool> isBitXset(somenumber, false);
因为std::vector的data()
不存在。我无法更改legacyFunction()
的接口
是否有一种很好的替代C型布尔阵列的方法?您可以使用和:
如果在编译时知道数组的大小,请考虑使用.< /P>不是<代码> STD::数组也有可能吗?@ RaKeE1111:如果<代码> s>在您的第二个示例中:我将如何应用它来进行函数调用?像这样
legacyFunction(somenumber,reinterpret_cast(v.data())代码>?@TobiMcNamobi:这可能会起作用,但我不确定它的安全性和标准合规性。只有经过适当的研究后才能使用。我建议使用unique\u ptr
@TobiMcNamobilegacyFunction(somenumber,&v[0])代码>?请注意,缺少的data()
成员函数不是唯一的问题std::vector
是一种专门化,可以提供更节省空间的实现。因此vector
和C-stylebool
数组的元素可能不会重叠。@moooeeep的可能重复是的,对,对不起。通常我会自己删除这个问题。但我更喜欢维托里奥·罗密欧给出的答案,而不是2009年的任何一个答案。不用担心。我只是想把它们联系起来,并认为它们可能关系密切,可以作为复制品。其他人可能不同意。
legacyFunction(somenumber, isBitXSet.data());
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;
}
struct my_bool { bool _b; };
std::vector<my_bool> v; // will not use `vector<bool>` specialization