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