开通了新的博客,写下自己的小白历程 2014.1.21起。都是在A题过程中所遇到的困难,记录下解决方式。
1,While(cin)会进行无限循环,估计和构造函数有关,而改为while(cin) cin>>n;则正常输入,这里while(cin)和while(1)都可表示无限循环,然而,while(cin)有可能被错误输入终止,例如n是int型的,而输入一个char则输入终止。
2,如何用new开二维数组:定义二维数组array[i][j]
(1)定义一维代替
char *array;
array = new char[x*y];
用*(array+i*y+j);来表示array[i][j]
(2)定义一个二维数组
char **array;
array = new char *[x];
for(int i=0;i<x;i++)
array[i] = new char[y];
用array[i][j]直接表示
但是:注意delete
for(i=0;i<x;i++)
delete[] array[i];
delete[] array;
3,error expected constant expression:希望是常量表达式
出现在如果A[M][N]中的MN未知,需要运行的时候从cin进来,那么直接定义A[M][N]是无法事先分配空间的,用动态分配解决。
3,error C2109: subscript requires array or pointer type 下标需要数组或者指针形式
当定义int *A; A=new int[M*N];后直接使用A[i][j]会出现这样的问题,不可以直接访问,因为它本质上是一个一维数组,改成*(A+i*N+j)进行访问即可。
4,记录运算符重载error C2803: 'operator +' must have at least one formal parameter of class type
两个不能都是C++的标准类型,以防止用户修改用于标准类型数据的运算符性质。重载的运算符必须和用户定义的类型对象一起使用,参数至少应有一个是类对象(或者类对象的引用)