2

行に行のベクトルが含まれる行のベクトルを割り当てる必要があります。ベクトルが連続することは知っています。ベクトルのベクトルも連続するかどうかを知りたかったのです。サンプルコードを以下に示します

vector<long> firstRow;

firstRow.push_back(0);

firstRow.push_back(1);

vector<long> secondRow;

secondRow.push_back(0);

secondRow.push_back(1); 

vector< vector < long> > data;

data.push_back(firstRow);

data.push_back(secondRow);

メモリ内のシーケンスは 0 1 0 1 でしょうか?

4

6 に答える 6

19

要するに、いいえ。これが実際に起こることです:

ここに画像の説明を入力

于 2013-10-21T21:03:09.363 に答える
5

他の人が言ったように、いいえ: ネストされたベクトルは連続していません (ちなみに、ネストされた配列は同じです; 静的サイズの配列は例外です)。

C++ (および他の多くの言語) で配列の連続した配列 (および一般に任意の密な行列) を実装する方法は、フラットな配列を持ち、インデックスを手動で計算することです。

typedef std::vector<long> matrix_t;

matrix_t M(width * height);
// Assign to index i, j:
M[i + j * width] = value;

…もちろん、これは適切にクラスにカプセル化する必要があります。

于 2013-10-21T21:00:20.843 に答える
3

いいえ、boost::multi_array<long, 2>代わりに使用してください。

于 2013-10-21T21:03:57.390 に答える