C++ 二维数组动态内存分配重载以及拷贝构造

总时间限制: 

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 *p;
	int row;
	int col;
public:
	Array2(int row_, int col_) :row(row_),col(col_)
	{
		p = new int[row*col+1];
	}

	int * operator [](int n)
	{
		return  p + n * col;
	}

	int operator()(int row_, int col_)
	{
		return *(p + row_ * col + col_);
	}
	Array2():row(0),col(0)
	{
		p = NULL;
	}

	Array2(Array2 &a)
	{
		if (p)
			delete[] p;
		p = new int[a.col*a.row + 1];
		col = a.col;
		row = a.row;
		memcpy(p, a.p, col*row);
	}
};

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;
}

猜你喜欢

转载自blog.csdn.net/wwxy1995/article/details/84001105