c++ - 有没有标准的方法来替换 C 风格的 bool 数组?

标签 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.

    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 风格的 bool 数组有什么好的替代品吗?

最佳答案

您可以使用 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;
}

或者,您可以“欺骗”std::vector通过创建自己的 bool包装器:

struct my_bool { bool _b; };
std::vector<my_bool> v; // will not use `vector<bool>` specialization

如果您在编译时知道数组的大小,请考虑使用 std::array .

关于c++ - 有没有标准的方法来替换 C 风格的 bool 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46115237/

相关文章:

c++ - 为什么 "cin >>"作为条件

c++ - 在 Windows 7 下的 Qt 5.5.1 应用程序中使用 RInside

C++ 字符数组未通过管道直接读取

c++ - 使用全局对象作为 COM 类工厂是否合法?

python - 获取列表中的最大重复项

Python 根据变量名称迭代变量

list - 如果序列出现在列表中则返回 True

Scalac 给出错误发现 : scala. Boolean(false) required : java. lang.Boolean

Java变化比较

java - 如何解决java.lang.ArrayIndexOutOfBoundsException错误