在C++编程语言中,对于数组的操作是一个非常基础而又重要的应用技术。我们在这篇文章中会为大家详细介绍C++二维数组初始化的相关操作方法,方便大家对这方面的应用技术有所掌握。C++的二维数组是不能用变量初始化的,像下面的代码肯定是编译不通过的:
int i=5;
int j=4;
int a[i][j];
- 1.
- 2.
- 3.
像这样的代码肯定是很多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();
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
用一个模板类实现这个功能,是C++二维数组初始化中一个不错的选择,但在实际中,是很少有人这样写的,这是在more effective C++给出的方法,目的是为了说明proxy模式,Array1D是作为一个proxy类存在的。
【编辑推荐】