怎样实现动态二维数组

y316237781 2010-07-07 08:53:52
大家好!
我在网上看到一个题:输入一个数,输出矩阵的结果是:
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25

这是输入五得到的结果
我现能实现这个矩阵。
我是用的一个二维数组存那些数。
现在我想实现 当我输入一个N,就可以分配一个动态N * N的二维数组。
现在不知怎样实现,请各位指教。
麻烦写具体点。谢谢!
...全文
165 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixung 2010-07-08
  • 打赏
  • 举报
回复
int *pArr = (int*)malloc(sizeof(int)*N*N);
or
int *pArr = new int[N*N];
djjlove_2008 2010-07-08
  • 打赏
  • 举报
回复
int arr[M][M];
arr = new int*[M];

for(int i = 0; i < M; ++i)
arr[i] = new int[M];
kiss_rule 2010-07-08
  • 打赏
  • 举报
回复
我也写了一个。vc6.0
#include <iostream>

using namespace std;

template <typename T>
void MallocArray (T** & array, int const& row, int const& col) {
array = new T* [row];
for (int i = 0; i<row; ++i) {
array[i] = new T [col];
}
}
template <typename T>
void DeleteArray (T** array, int const& row, int const& col ) {
for (int i=0; i<row; ++i) {
delete [] array[i];
}
delete [] array;
}
int main (void) {
int row, col;
cout << "Row : ";
cin >> row;
cout << "col : ";
cin >> col;
int ** dataArray;
MallocArray(dataArray, row, col);
for (int i=0; i<row; ++i)
for (int j=0; j<col; ++j) {
dataArray[i][j] = i*j;
}
for ( i=0; i<row; ++i)
for (int j=0; j<col; ++j){
cout << "dataArray["<< i << "][" << j << "] = " <<dataArray[i][j] << endl;
}
DeleteArray(dataArray, row, col);
return 0;
}
杨卓荦 2010-07-07
  • 打赏
  • 举报
回复
vector< vector<int> > a;
耍宝王 2010-07-07
  • 打赏
  • 举报
回复
1.
A (*ga)[n] = new A[m][n];
...
delete []ga;
缺点:n必须是已知
优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)

2.
A** ga = new A*[m];
for(int i = 0; i < m; i++)
ga[i] = new A[n];
...
for(int i = 0; i < m; i++)
delete []ga[i];
delete []ga;
缺点:非连续储存,程序烦琐,ga为A**类型
优点:调用直观,n可以不是已知

3.
A* ga = new A[m*n];
...
delete []ga;
缺点:调用不够直观
优点:连续储存,n可以不是已知

4.
2的改进版
A** ga = new A*[m];
ga[0] = new A[m*n];
for(int i = 1; i < m; i++)
ga[i] = ga[i-1]+n;
优点:连续存储,n可以不是已知,析构方便,猜想只需delete [] ga;
实际:
delete [] ga[0]; // memory for A.
delete [] ga; // memory for A*.
ga = NULL;
yunyun1886358 2010-07-07
  • 打赏
  • 举报
回复

#include <iostream>

using namespace std;

int main()
{
int N;
cin >> N;
int** pArray = new int* [N];
pArray[0] = new int[N * N]; // 分配连续内存

// 用pArray[1][0]无法寻址,还需指定下标寻址方式
for(int i = 1; i < N; i++)
{
pArray[i] = pArray[i-1] + N;
}

return 0;
}
wyz007134 2010-07-07
  • 打赏
  • 举报
回复
int N;
cin >> N;
int* arr = new int[N * N];

使用的时候用行*列 + 列来调用元素
smartjeck 2010-07-07
  • 打赏
  • 举报
回复
看看 还有没有程序


二楼水很深 学习
y316237781 2010-07-07
  • 打赏
  • 举报
回复
请详细一点,谢谢。
我不会。
shiyi889 2010-07-07
  • 打赏
  • 举报
回复
可用链表
hengshan 2010-07-07
  • 打赏
  • 举报
回复
std::vector<std::vector<type> > table;

这个结构就可以满足你的要求
cxxer 2010-07-07
  • 打赏
  • 举报
回复

Windows XP SP2, Dev C++。

#include <iostream>
#include <cstdlib>

using namespace std;

template<typename T> class Array;
template<typename T> class ArrayBody
{
friend class Array<T>;
T * tpBody;
int iRows,iColumns, iCurrentRow;
ArrayBody(int iRsz, int iCsz)
{
tpBody = new T[iRsz * iCsz];
iRows = iRsz; iColumns = iCsz; iCurrentRow = -1;
}
public:
T& operator[](int j)
{
bool row_error, column_error;
row_error = column_error =false;
try
{
if (iCurrentRow < 0 || iCurrentRow >= iRows)
row_error = true;
if (row_error == true || column_error == true)
throw 'e';
}
catch(char)
{
if (row_error == true)
cerr << "行下标越界[" << iCurrentRow << "]";
if (column_error == true)
cerr << "列下标越界[" << j << "]";
cout << "\n";
}
return tpBody[iCurrentRow * iColumns + j];
}
~ArrayBody() { delete[] tpBody;}
};

template<typename T> class Array
{
ArrayBody<T> tBody;
public:
ArrayBody<T>& operator[](int i)
{
tBody.iCurrentRow = i;
return tBody;
}
Array(int iRsz, int iCsz):tBody(iRsz, iCsz){}
};

int main()
{
int row, col;
cout << "row:";
cin >> row;
cout << "col:";
cin >> col;
Array<int> a1(row, col);

int element;
for(int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout << "array[" << i << "][" << j << "] = " ;
cin >> element;
a1[i][j] = element;
}
}

for(int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
element = a1[i][j];
cout << "array[" << i << "][" << j << "] = " <<element << "\t";
}
cout << endl;
}

system("PAUSE");
return 0;

}
fallening 2010-07-07
  • 打赏
  • 举报
回复
int N;
cin >> N;
int arr[N][N];

//c99 support

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧