二度目の質問失礼致します。
配列を動的生成する場合は
のようにすればよいとおぼえたのですが
b[10][10]
のような、要素数を二つ持つ配列の要素数を
2つとも変数にするためにはどうすればよいのでしょうか?
のように書くとエラーが出ます。
複数の要素数を持つ配列の動的生成
Re: 複数の要素数を持つ配列の動的生成
・1列ずつ確保する(警告:各列の領域が連続になるかは保証されない、高い確率で連続にならない)
・1次元配列new int[x * y]を確保し、2次元配列とみなして利用する(b[j]の代わりにb[y * i + j]にアクセスする)
ソースコード省略
・1次元配列を2次元配列として利用できるように、
[]演算子をオーバーロードしてbがデータ配列のx*i番目(0-origin)の要素へのポインタを返すようなクラスを作成する
などの方法が考えられます。
int main() {
int** b;
int x = 10, y = 10;
// 生成
b = new int*[x];
for (int i = 0; i < x; i++)b[i] = new int[y];
// 開放
for (int i = 0; i < x; i++)delete[] b[i];
delete[] b;
return 0;
}
ソースコード省略
・1次元配列を2次元配列として利用できるように、
[]演算子をオーバーロードしてbがデータ配列のx*i番目(0-origin)の要素へのポインタを返すようなクラスを作成する
#include <cstdio>
template<typename T>
class two_d_array {
private:
T* array;
unsigned int row_size, col_size;
public:
two_d_array() {
array = new T[1];
row_size = 1;
col_size = 1;
}
two_d_array(unsigned int row, unsigned int col) {
array = new T[col * row];
row_size = row;
col_size = col;
}
two_d_array(const two_d_array<T>& tda) {
unsigned int all_size = tda.col_size * tda.row_size;
array = new T[all_size];
row_size = tda.row_size;
col_size = tda.col_size;
for (unsigned int i = 0; i < all_size; i++) array[i] = tda.array[i];
}
~two_d_array() {
delete[] array;
}
two_d_array<T>& operator=(const two_d_array<T>& tda) {
unsigned int all_size = tda.col_size * tda.row_size;
delete[] array;
array = new T[all_size];
row_size = tda.row_size;
col_size = tda.col_size;
for (unsigned int i = 0; i < all_size; i++) array[i] = tda.array[i];
return *this;
}
T* operator[](unsigned int idx) {
return array + col_size * idx;
}
const T* operator[](unsigned int idx) const {
return array + col_size * idx;
}
};
int main() {
int x = 10, y = 10;
two_d_array<int> b(x, y);
b[2][3] = 123;
b[4][5] = 456;
two_d_array<int> c = b;
two_d_array<int> d;
printf("%d\n", c[2][3]);
printf("%d\n", c[4][5]);
c[4][5] = 789;
printf("%d\n", c[4][5]);
printf("%d\n", b[4][5]);
d = b;
printf("%d\n",d[2][3]);
d[2][3] = 101112;
printf("%d\n",d[2][3]);
printf("%d\n",b[2][3]);
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 複数の要素数を持つ配列の動的生成
前の投稿ではC++と仮定しましたが、質問文中に言語が指定されていないので、comet さんが書きました:b[10][10]
のような、要素数を二つ持つ配列の要素数を
2つとも変数にするためにはどうすればよいのでしょうか?
Javaを使うというのも一つの手です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 複数の要素数を持つ配列の動的生成
みけCATさん、ありがとうございます。
使用言語を明記しなかったのは私の落ち度でありました。すいません
長いこと返信せず失礼いたしました。
ソースコードを書いていただいた二例についていろいろ試してみましたが、
なるほど、基本的には一例目で対応できますね。
ただダブルポインタやオペレータなど未習得の技術が多いので勉強して出直します。
ありがとうございました。
使用言語を明記しなかったのは私の落ち度でありました。すいません
長いこと返信せず失礼いたしました。
ソースコードを書いていただいた二例についていろいろ試してみましたが、
なるほど、基本的には一例目で対応できますね。
ただダブルポインタやオペレータなど未習得の技術が多いので勉強して出直します。
ありがとうございました。