在C++编程语言中,对于数组的操作是一个非常基础而又重要的应用技术。我们在这篇文章中会为大家详细介绍C++二维数组初始化的相关操作方法,方便大家对这方面的应用技术有所掌握。C++的二维数组是不能用变量初始化的,像下面的代码肯定是编译不通过的:
- int i=5;
- int j=4;
- int a[i][j];
像这样的代码肯定是很多C++像我一样的初学者的困感,如果数组是在编译的阶段确定其内存位置的,而变量不能作为数组的维数.下面,用一个模板类,完成这种C++二维数组初始化的功能
- template< class T>
- class Array2D{
- private:
- T* pData;
- int dim1;
- int dim2;
- int dim1Index;
- class Array1D{
- private:
- int length;
- T* start;
- public:
- Array1D(T* start,int length):length(length),start(start){}
- T& operator[](int index){
- if(index>length){
- throw out_of_range("数组第二维数越界");
- }else{
- return *(start+index);
- }
- }
- };
- public:
- Array2D(int dim1,int dim2){
- this->dim1dim1=dim1;
- this->dim2dim2=dim2;
- int size=dim1*dim2;
- pData=new T[size];
- }
- Array1D operator[](int index){
- return Array1D(pData+index*dim1,dim2);
- }
- void print(){
- for(int i=0;i< dim1;i++){
- for(int j=0;j< dim2;j++){
- cout< < *(pData+dim1*i+j)< < " ";
- }
- cout< < endl;
- }
- }
- };
- int main(){
- int index1=2;
- int index2=2;
- Array2D< int> test(index1,index2);
- test[0][0]=1;
- test[0][1]=2;
- test[1][0]=3;
- test[1][1]=4;
- test.print();
- }
用一个模板类实现这个功能,是C++二维数组初始化中一个不错的选择,但在实际中,是很少有人这样写的,这是在more effective C++给出的方法,目的是为了说明proxy模式,Array1D是作为一个proxy类存在的。
【编辑推荐】