3

Foo** の形式で 2D 配列を操作する C ライブラリを使用します。C++ コード内で使用するため、ある種のラッパーが必要です。1D 配列の場合、ベクトル反復子は単なるポインターであるため簡単ですが、2D の場合はさらに複雑になります。データをコピーせずに Foo** のラッパーを作成することは可能ですか?

4

2 に答える 2

3

a の要素はvector<Foo>、動的に割り当てられた連続したメモリに格納されるためFoo*、最初のケースと同様に、配列へのポインターを取得できます。

ただし、ネストされたベクトルの要素は連続した 2D 配列として格納されないため、直接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();

そうすれば、データをコピーするのではなく、行ポインターだけをコピーします。

于 2013-05-14T11:08:25.140 に答える