C++二维数组初始化相关应用技巧分享

开发 后端
C++二维数组初始化能不能使用变量开进行呢?首先让我们一起来阅读本文,并从中找到一个正确的答案,帮助我们解决相关问题。

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类存在的。

【编辑推荐】

  1. C++模拟event关键字具体实现方案
  2. C++ void使用规则总结概览
  3. C++ void基础概念讲述
  4. C++单向链表实现代码解读
  5. C++函数对象与函数指针不同之处
责任编辑:曹凯 来源: 博客园
相关推荐

2009-09-18 11:33:37

C#二维数组初始化

2010-07-19 13:17:12

Perl二维数组

2010-02-04 16:26:54

C++二维数组new

2010-02-05 13:44:06

C++ eof()函数

2009-08-28 11:24:48

C#一维数组初始化

2010-01-22 13:16:05

VB.NET初始化数组

2023-11-12 23:08:17

C++初始化

2010-02-03 11:01:18

C++类静态成员初始化

2009-08-28 11:09:35

C#数组初始化

2009-09-18 11:15:52

C#数组初始化

2010-02-01 11:13:00

C++ Traits

2010-01-05 15:35:21

.NET Framew

2010-02-05 17:25:26

C++标识符命名规则

2009-09-17 16:06:22

C#数组初始化

2009-08-07 10:12:09

C#二维数组

2010-02-06 13:47:08

C++标准扩展

2009-09-02 16:52:55

C#数组初始化

2010-02-04 14:58:06

C++内存分配

2010-01-14 17:58:41

C++语言

2010-02-01 14:21:24

C++初始化列表
点赞
收藏

51CTO技术栈公众号