017:第四周程序填空题3
总时间限制:
1000ms
内存限制:
65536kB
// 在此处补充你的代码
描述
写一个二维数组类 Array2,使得下面程序的输出结果是:
0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
程序:
#include <iostream> #include <cstring> using namespace std; class Array2 {
}; int main() { Array2 a(3,4); int i,j; for( i = 0;i < 3; ++i ) for( j = 0; j < 4; j ++ ) a[i][j] = i * 4 + j; for( i = 0;i < 3; ++i ) { for( j = 0; j < 4; j ++ ) { cout << a(i,j) << ","; } cout << endl; } cout << "next" << endl; Array2 b; b = a; for( i = 0;i < 3; ++i ) { for( j = 0; j < 4; j ++ ) { cout << b[i][j] << ","; } cout << endl; } return 0; }
输入
无
输出
0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
样例输入
None
样例输出
0,1,2,3, 4,5,6,7, 8,9,10,11, next 0,1,2,3, 4,5,6,7, 8,9,10,11,
这里关键是用一维数组结合内存的动态分配实现二维数组,完整代码
#include <iostream>
#include <cstring>
using namespace std;
class Array2 {
// 在此处补充你的代码
private:
int *array;
int row_;
int col_;
public:
Array2(int row, int col):
row_(row),col_(col)
{
array = new int[row_*col_];
}
int* operator [](int row)
{
return &array[row*col_];
}
int operator()(int row, int col)
{
return array[row*col_ + col];
}
Array2() {}
Array2 & operator = (Array2 & a)
{
delete[] array;
col_ = a.col_;
row_ = a.row_;
array = new int[col_*row_];
memcpy(array, a.array, sizeof(int)*row_*col_);
return *this;
}
};
int main() {
Array2 a(3, 4);
int i, j;
for (i = 0; i < 3; ++i)
for (j = 0; j < 4; j++)
a[i][j] = i * 4 + j;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 4; j++) {
cout << a(i, j) << ",";
}
cout << endl;
}
cout << "next" << endl;
Array2 b; b = a;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 4; j++) {
cout << b[i][j] << ",";
}
cout << endl;
}
system("pause");
return 0;
}