c++ - 如何在 C++ 代码中包装 C 二维数组 (Foo**)?

标签 c++ c stl wrapper

我使用一个 C 库,它以 Foo** 的形式对二维数组进行操作。我在 C++ 代码中使用它,所以我需要某种包装器。对于一维数组,它很简单,因为 vector 迭代器只是指针,但对于二维数组,它会变得更加复杂。是否可以在不复制数据的情况下为 Foo** 制作包装器?

最佳答案

vector<Foo> 的元素存储在动态分配的连续内存中,因此您可以获得一个指针 Foo*到数组,就像您在第一个案例中所做的那样。

但是嵌套 vector 的元素vector<vector<Foo> >未存储为连续的二维数组,因此您无法获得 Foo**直接。

你可以尝试这样的事情:

vector<vector<Foo> > data;
vector<Foo*> data_rows;
for(auto it = data.begin(); it != data.end(); ++it) {
    //in c++11, you can use data() instead of casting begin()
    data_rows.push_back(it->data());
}
Foo** c_data = data_rows.data();

这样您就不会复制数据,而只会复制行指针。

关于c++ - 如何在 C++ 代码中包装 C 二维数组 (Foo**)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16541471/

相关文章:

c++ - 使用 C++ 模板覆盖遗留的 C 风格函数

c++ - 解析文本格式的 protobuf 消息时如何忽略错误的字段

c++ - 如何将对象赋予 boost::statecart 中的状态?

C++ 模板数组运算符 [] 使用整数

c - 扫描成结构

c++ - 对未初始化内存使用算法的优点

c++ - 为什么 QVector<TYPE*​​>::contains 期望指向非常量 TYPE 的指针作为其参数?

c++ - 如何检查 TCP 端口是否已被监听?

c++ - 如何将c/c++回调函数转换为delphi

c++ - C++ 中的 Java HashSet 等价物