複数の要素数を持つ配列の動的生成
Posted: 2014年9月08日(月) 23:44
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;
}
#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;
}