我使用一个 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/