arr[][]
たとえば、 5行で各行に可変数の列がある2D配列を作成するにはどうすればよいでしょうか?
おそらく4 列のarr[5][]
1 行目arr[0][]
5列の2行目arr[1][]
など?
STL ベクトル ソリューションは気にしませんが、ベクトルについてはまだよくわかりません。
arr[][]
たとえば、 5行で各行に可変数の列がある2D配列を作成するにはどうすればよいでしょうか?
おそらく4 列のarr[5][]
1 行目arr[0][]
5列の2行目arr[1][]
など?
STL ベクトル ソリューションは気にしませんが、ベクトルについてはまだよくわかりません。
C++11 では、ベクトルを使用して簡単に実行できます (読みやすくするために改行が追加されています)。
std::vector< std::vector <int > > arr = {
{1,2,3},
{4,5},
{6,7,8,9,0}
};
C++11 コンパイラがない場合、まったく同じように動作しますが、簡単に初期化することはできません。要素を個別に設定できます。
std::vector< std::vector <int > > arr;//vector of vectors. Think of each element as of a "row"
std::vector<int> sub;//a temporary "row"
sub.push_back(1);
sub.push_back(2);
arr.push_back(sub);//Adding a "row" to the vector
sub.clear();//Making another one
sub.push_back(1);
sub.push_back(12);
sub.push_back(54);
arr.push_back(sub);//Adding another "row" to the vector
または、通常の配列で各「行」を初期化できます。
std::vector< std::vector <int > > arr;
static const int arr[] = {1,2,3,4};//A "row" as an ordinary array
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) ); //Setting a "Row" as a vector
arr.push_back(vec);//Adding the "row" to the vector of vectors.
array[X][Y]
を作成すると、自動的にX*Y
行列になるため、通常の配列で必要なことを正確に行うことはできません。ただし、ポインターの配列を使用できます。
int * array[3];
//also possible: int ** array = new int*[3]; but don't forget to delete it afterwards.
int sub1[3] = {1,2,3};
int sub2[2] = {1,2};
int sub3[4] = {1,2,3,4};
array[0] = sub1;
array[1] = sub2;
array[2] = sub3;
で要素にアクセスしarray[X][Y]
ます。ただし、ベクトル ソリューションは全体的にはるかに優れています。
次のようにすることができます (int
要素の配列を想定):
int** arr = new int*[5];
for(size_t i = 0; i < 5; ++i)
{
arr[i] = new int[4];
}
これにより、動的に割り当てられた 5 x 4 の 2 次元配列が得られます。これを次のように使用できます。arr[i][j] = 15;
配列の使用が終了したら、メモリの割り当てを解除することを忘れないでください。
for(size_t i = 0; i < 5; ++i)
{
delete[] arr[i];
}
delete[] arr;
std::vector
ただし、を使用することをお勧めします。参照用に他の回答を見ることができます。
したがって、2D 配列はstd::vector<std::vector<T>>
であり、T
は型です。また、 mb std::array<std::vector<int>, 5>
. または、独自の配列クラスを記述します。