在C++中如何定义一个行数和列数比较大的矩阵
2013-04-23 19:40
351 查看
在C++中,定义一个行数和列数为常量的矩阵很简单,例如:
double A[10][15];
当这条语句在一对{ }之间时,为在函数内部定义的常规变量,它使用自动存储空间,被称为自动变量,这意味着他们在所属的函数被调用时自动产生,在函数结束时消亡,其作用域为包含它的代码块,通常存储在栈中,遵循后进先出的顺序。然而在下面两种情况下,这样定义是不行的。
其一,如果矩阵的尺寸较大,例如,A是400*400的double型矩阵,这样的定义方式会使程序运行时出错。因为栈空间的大小是有限的,这个A足以“撑破”栈空间。解决的办法是把A定义成全局变量,方式有两种:一是在函数外面定义它;另一种是在声明时使用关键字static。
其二,如果矩阵大小要等到程序运行时才确定,也即矩阵的行数和列数是变量。那么应该使用内存动态分配,即让程序在运行时分配内存。
定义成全局固然能解决问题,但是这么大的矩阵始终占用内存还是有点遗憾,动态分配内存不但能解决大小问题,而且当不需要时还能回收其占用的内存。
在C++中动态分配一个矩阵可如下执行:假设m,n是已赋正整数值得整型变量,下面这段程序在内存中定义一个m*n的double型元素矩阵:
double **A = new double* [m];
for(inti=0;i<m;i++)
A[i]=new double
;
如此,可以通过A[i][j]访问A的i行j列元素。当不再需要时,应该回收:
for(int i=0;i<m;i++)
delete [] A[i];
delete [] A;
double A[10][15];
当这条语句在一对{ }之间时,为在函数内部定义的常规变量,它使用自动存储空间,被称为自动变量,这意味着他们在所属的函数被调用时自动产生,在函数结束时消亡,其作用域为包含它的代码块,通常存储在栈中,遵循后进先出的顺序。然而在下面两种情况下,这样定义是不行的。
其一,如果矩阵的尺寸较大,例如,A是400*400的double型矩阵,这样的定义方式会使程序运行时出错。因为栈空间的大小是有限的,这个A足以“撑破”栈空间。解决的办法是把A定义成全局变量,方式有两种:一是在函数外面定义它;另一种是在声明时使用关键字static。
其二,如果矩阵大小要等到程序运行时才确定,也即矩阵的行数和列数是变量。那么应该使用内存动态分配,即让程序在运行时分配内存。
定义成全局固然能解决问题,但是这么大的矩阵始终占用内存还是有点遗憾,动态分配内存不但能解决大小问题,而且当不需要时还能回收其占用的内存。
在C++中动态分配一个矩阵可如下执行:假设m,n是已赋正整数值得整型变量,下面这段程序在内存中定义一个m*n的double型元素矩阵:
double **A = new double* [m];
for(inti=0;i<m;i++)
A[i]=new double
;
如此,可以通过A[i][j]访问A的i行j列元素。当不再需要时,应该回收:
for(int i=0;i<m;i++)
delete [] A[i];
delete [] A;
相关文章推荐
- C#中如何获取一个二维数组的两维长度,即行数和列数?
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
- C#中如何获取一个二维数组的两维长度,即行数和列数?
- C#中如何获取一个二维数组的两维长度,即行数和列数?
- C/C++中如何判断一个输入的变量是否和其定义的类型一致
- 如何判断一个C++对象是否在堆上(通过GetProcessHeaps取得所有堆,然后与对象地址比较即可),附许多精彩评论
- 稀疏矩阵A和B,其行数和列数对应相等,编写一个程序,计算A和B之和,假设稀疏矩阵采用三元组表示
- 面试例题:输入n,求一个n x n矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现? (中国台湾著名硬件公司2007年11月面试题)
- matlab-基础 size函数获取一个矩阵的行数与列数
- c++ 如何用一个函数实现两个字符串的比较
- C\C++小知识: 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- c++如何读取文本文件中矩阵,得到矩阵的列数
- 对面试题“输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现?”的理解
- C++如何定义一个全局类
- 如何用python的装饰器定义一个像C++一样的强类型函数
- C#中如何获取一个二维数组的两维长度,即行数和列数?
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
- 立此存照(16)[C++]如何将一个数字转换为英文读法--英文三位计数法的英文转换
- c++高级---c++类的内部定义比较特殊的东西(类型,常量等)