gpt4 book ai didi

c++ - 如何将 C++ vector 转换为 C 样式数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:45 60 4
gpt4 key购买 nike

我有一个存储数组的类,我需要编写一个方法来返回指向该数组的指针,以便其他对象可以访问/修改它。

在我的程序的旧版本中,我通过以 C 风格定义数组来做到这一点。即,有一个私有(private)元素 bool* list然后在构造函数中分配内存(并在析构函数中释放它)。那么方法就很简单了:

bool* MyClass::getList() {
return list;
}

现在,我决定重写代码并使用std::vector<bool>而不是经典数组。问题是我也修改了上面的方法:

bool* MyClass::getList() {
return &(list[0]);
}

这似乎是将 C++ vector 转换为 C 数组的标准方法。但是,我无法编译我的代码,出现以下错误:

error: taking address of temporary [-fpermissive]
error: cannot convert ‘std::vector<bool>::reference* {aka std::_Bit_reference*}’ to ‘bool*’ in return

谁能帮我解决这个问题并告诉我该怎么做?

(我还读到另一种选择是使用 list.data() 作为指针,但这只适用于最新版本的 C++ 编译器。我不确定这是否是个好主意)。

谢谢,

最佳答案

您的思路大体上是正确的,获取第一个元素的指针就足够了。然而, std::vector<bool> is not really a vector of bool s因为它被实现为一个位集。 C++ 标准委员会和库工作组普遍认为 vector<bool>应该弃用并随后从标准库中删除,而该功能将以不同的名称重新引入。但现在它仍然存在。

回到您的问题,您不能真正将位集解释为 bool 数组。因此,有两种可能的方法来解决这个问题:

  1. 替换std::vector<bool>one of the alternatives这会给你正确的行为。
  2. 转换std::vector<bool>需要时手动添加到 C 数组。例如,您可以使用 size()预分配内存,然后遍历 vector 并填充我们的数组。

希望对您有所帮助。祝你好运!

关于c++ - 如何将 C++ vector 转换为 C 样式数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252884/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com