boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个2维动态矩阵的问题
相关主题
搞不定,不得不问,一维数组跟二维数组的问题
请问C#里面,如何对N个数组设置循环访问?
[合集] 一个vector的问题
Java数组怎么样能参数传递 (转载)
问题请教
[合集] 一道C++的面试题,双黄包求答案 (转载)
也问个二维数组的函数传递问题
Matlab中,如何沿着某个方向读取二维矩阵中的数据
perl二维数组一问
关于java的二维数组的问题
相关话题的讨论汇总
话题: double话题: int话题: new话题: d4话题: 动态
进入Programming版参与讨论
1 (共1页)
t**g
发帖数: 1164
1
我想生成一个double[n][4]的2维矩阵(注意n必须在第一个位置)
其中n是运行期才知道
请教怎么声明这个函数指针?(就是说动态生成一个array,其中每个元素是一个size
4的
小array)
当然我可以用两个new操作做到
double **A;
A=new double*[n];
for(int i=0;i A[i]=new double[4];
可是假如我只想用一个new
该怎么做?
好像可以声明
double *A[4];
可是delete[] A就不行
谢谢!
O*******d
发帖数: 20343
2
用一个n*4的一维数组。
double *A = new double[n * 4];
不能用index。可以用下法
for(int i = 0; i < n; ++i)
for(int j = 0; j < 4; ++j)
*(A + n * i + j) = whatever;
O*******d
发帖数: 20343
3
上法在图像处理中用的极多。 图像的象素参数,例如色彩,都是放在一维数组里的,
但需要事先知道图像的高和宽才能正确处理图像。数组本身没有高宽信息。
i******r
发帖数: 323
4
这样可以吗?
可以从打印出来的地址看出这些cell是连续的
和直接定义二位数组效果一样
#include
using namespace std;
typedef double D4[4];
D4 *A;
int main(void)
{
int n = 3;
A = new D4[n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < 4; ++j)
printf("%p\n", &A[i][j]);
return 0;
}

size

【在 t**g 的大作中提到】
: 我想生成一个double[n][4]的2维矩阵(注意n必须在第一个位置)
: 其中n是运行期才知道
: 请教怎么声明这个函数指针?(就是说动态生成一个array,其中每个元素是一个size
: 4的
: 小array)
: 当然我可以用两个new操作做到
: double **A;
: A=new double*[n];
: for(int i=0;i: A[i]=new double[4];

f******y
发帖数: 2971
5
用二维的vector,非常容易,还不用担心delete的问题。
t**o
发帖数: 144
6
和OverCloud一样,好多年没有用过二维数组了,尽管经常要处理二维数据。
t**g
发帖数: 1164
7
可是vector size是动态增长的
会不会导致效率比较低?

【在 f******y 的大作中提到】
: 用二维的vector,非常容易,还不用担心delete的问题。
t**g
发帖数: 1164
8

的确是一个办法
谢谢
不过C++里没有别的直接解决的办法了么?

【在 O*******d 的大作中提到】
: 用一个n*4的一维数组。
: double *A = new double[n * 4];
: 不能用index。可以用下法
: for(int i = 0; i < n; ++i)
: for(int j = 0; j < 4; ++j)
: *(A + n * i + j) = whatever;

t**g
发帖数: 1164
9
这是C吗?
我用的C++
让我试试
谢谢

【在 i******r 的大作中提到】
: 这样可以吗?
: 可以从打印出来的地址看出这些cell是连续的
: 和直接定义二位数组效果一样
: #include
: using namespace std;
: typedef double D4[4];
: D4 *A;
: int main(void)
: {
: int n = 3;

O*******d
发帖数: 20343
10
把 *(A + n * i + j)写成一个macro, 用起来也很方便。
例如
#define slot(a, b, c) (*(a + n * b + c))
...
...
...
slot(A, i, j) = whatever;

【在 t**g 的大作中提到】
: 嗯
: 的确是一个办法
: 谢谢
: 不过C++里没有别的直接解决的办法了么?

t****t
发帖数: 6806
11
这个未免也太容易出错了

【在 O*******d 的大作中提到】
: 把 *(A + n * i + j)写成一个macro, 用起来也很方便。
: 例如
: #define slot(a, b, c) (*(a + n * b + c))
: ...
: ...
: ...
: slot(A, i, j) = whatever;

f******y
发帖数: 2971
12
你可以固定长度啊。

【在 t**g 的大作中提到】
: 可是vector size是动态增长的
: 会不会导致效率比较低?

g****n
发帖数: 14
13
A (*pA)[4] = new A[n][4];
1 (共1页)
进入Programming版参与讨论
相关主题
关于java的二维数组的问题
在C/Fortran之间传递2维数组
问个模板函数的问题
T[ ][ ] vs T **
请教个简单的几何算法问题
问个技术问题: c++ 调试怎么显示二维数组?比如Visual Studio
关于二维矩阵的C的问题
请教大虾们一个C++返回值问题
career问题
关于matlab画图的一个小问题
相关话题的讨论汇总
话题: double话题: int话题: new话题: d4话题: 动态