C++中使用模板完成对二维数组的通用访问
来源:互联网 发布:百度阿波罗 知乎 编辑:程序博客网 时间:2024/05/18 02:51
定义一个二维数组,例如:
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
要用指针的形式访问它,需要这么使用:
int (*p)[3] = a;
若要将一个二维数组当作参数传递给一个函数,则函数的参数需要是一个“指向数组的指针”,而且需要指定第二维的大小。例如:
void PrintMatrix(int (*p)[3], int rowNum){for (int i = 0; i < rowNum; i++){for (int j = 0; j < 3; j++){cout<< p[i][j] << "\t";}cout<< "\n";}}int main(void){int a[2][3] = {{1, 2, 3}, {4, 5, 6}};PrintMatrix(a, 2);}
但是现在又有一个二维数组b[3][4],就不能直接调用PrintMatrix(b, 3),因为它的第二维大小是4。
若想写一个通用的函数,以矩阵的形式打印二维数组,可以将二维数组强制转换为普通的一维指针int*。例如:
void PrintMatrix(int* p, int rowNum, int colNum){ for (int i = 0; i < rowNum; i++) { for (int j = 0; j < colNum; j++) { cout<< *(p + colNum * i + j) << "\t"; } cout<< "\n"; }}int main(void){ int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; PrintMatrix(&a[0][0], 2, 3); int b[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; PrintMatrix(&b[0][0], 3, 4);}还有一种更直观的做法,是使用C++的模板。例如:
template<class T>void PrintMatrix(T a[], int rowNum, int colNum){for (int i = 0; i < rowNum; i++){for (int j = 0; j < colNum; j++){cout<<a[i][j] << "\t";}cout<< "\n";}}int main(void){int a[2][3] = {{1, 2, 3}, {4, 5, 6}};PrintMatrix(a, 2, 3);int b[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};PrintMatrix(b, 3, 4);}
0 0
- C++中使用模板完成对二维数组的通用访问
- c中二维数组的初始化,访问,赋值,函数形参的使用方式
- c语言中关于二维数组的指针访问
- C++:简单的二维数组模板类
- 指针数组 数组指针对二维数组的访问
- 对C语言二维数组的理解
- C语言中二维数组做参数的使用小结
- C中使用动态二维数组
- C语言二维数组访问
- C语言中传递与访问二维数组
- 如何在C/C++中动态分配地址连续访问快速的二维数组
- 如何在C/C++中动态分配二维数组并访问其中的数据
- 使用模板创建二维数组
- 函数模板中使用二维数组作为参数时的技巧
- C中动态二维数组的获取
- C/C++ 中二维数组的传递
- c语言中二维数组的问题
- c语言中二维数组的问题
- 【EasyMouse】把你的安卓手机变成无线鼠标
- 安卓系统的硬件要求
- java 对象使用类变量与方法(小笔记)
- SAP 生产订单投料方式比较
- 编程学习笔记
- C++中使用模板完成对二维数组的通用访问
- Java 堆排序的实现
- DB2 优化 RUNSTATS:排除索引碎片故障
- sybase touch
- How To Grab Someone IP Address ?
- 窗口创建相关函数
- NYOJ--113 字符串替换
- 系统运营浅谈
- Executor线程池