1

C++ でコーディングを始めてからわずか 15 日間ですが、行き詰まる問題に遭遇しました。目的を達成するには、動的な 2 次元配列を使用する必要があります。std::vector を使用して 1 次元の動的配列を作成していますが、2 次元の動的配列を作成する方法がわかりません。役立つ場合は VC++ を使用していますが、VC++ ライブラリ関数は使用していません。

誰もそれを成し遂げる方法を知っていますか?

4

6 に答える 6

3

ネストされたベクトルでそれを行うことができます:

int number_of_rows, number_of_columns;

std::vector < std::vector <int> > array;

array.resize(number_of_rows);

for (int i=0; i < number_of_rows; ++i)
    array[i].resize(number_of_columns);

array[1][2] = 3; // e.g. of assignment

コンストラクターで完全な配列サイズを初期化する:

std::vector <std::vector <int> > (nor, std::vector<int>(noc));

ただし、ネストされたstd::vector構造は 2 次元配列にバインドされないことに注意してください。ネストされたベクトルはそれぞれ異なるサイズを持つことができます。例えば:

std::vector <std::vector <int> > not_array(3); 
    // contains 3 inner empty vectors
for (int i=0; i < 3; ++i)
    arrray[i].resize(i+1);

これで、not_arrayサイズが1、2、3のベクトルがこの順序で含まれるようになりました。

(1D)ベクトルのベクトルだけでなく、行列(2D)を使用していることを確認したい場合は、外部ライブラリからの実装を使用できます。

于 2012-06-06T12:17:42.450 に答える
1

配列の次元が可変である場合 (たとえば、各行の長さが異なる場合)は、適切な解決策です (特定の要素タイプに vector<vector<int> >置き換えます)。int

各行の長さが同じ場合でもこのアプローチを使用できますが、このプロパティを確保するには、より多くの作業が必要になる場合があります。後者の場合、何らかのMatrixタイプをサポートするライブラリを見つけたほうがよいかもしれません。

于 2012-06-06T12:18:17.963 に答える
1

C++/STL 標準ライブラリには、2 次元のデータ構造はありません。

他の人が言ったように、vector. ただし、全体の構造の一貫性を保証するものではありません。(行列の 2 行が同じ長さであるとは限りません)。

これをオブジェクト内にカプセル化して、正しいマトリックス構造を強制する必要があります。または、既存の Matrix データ構造を使用することもできます。それを提供するライブラリはたくさんあると思います。

于 2012-06-06T12:26:19.963 に答える
0

2 次元配列はベクトルのベクトルです。を参照してください。

// Declare size of two dimensional array and initialize.
vector< vector<int> > vI2Matrix(3, vector<int>(2,0));   
vI2Matrix[0][0] = 0;
vI2Matrix[0][1] = 1;
vI2Matrix[1][0] = 10;
vI2Matrix[1][1] = 11;
vI2Matrix[2][0] = 20;
vI2Matrix[2][1] = 21;
cout << "Loop by index:" << endl;

int ii, jj;
for(ii=0; ii < 3; ii++)
{
  for(jj=0; jj < 2; jj++)
  {
     cout << vI2Matrix[ii][jj] << endl;
  }
}
于 2012-06-06T12:21:02.597 に答える
-1
std::vector< std::vector<int> >

後で

std::vector の拡大は非常に単純ですが、縮小にはいくつかの問題があります。参考文献を参照してください。

サイズを縮小すると、余分な要素が論理的にのみ削除されます (メモリの物理的な削減は保証されません)。メモリを強制的に減らすには、そのようなトリックを使用できます。

于 2012-06-06T12:13:21.593 に答える