标题:怎样才能定义一个动态的数组?
只看楼主
hyb472221439
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2011-10-4
结帖率:0
已结贴  问题点数:20 回复次数:15 
怎样才能定义一个动态的数组?
大一新生 C自习到数组了   线代刚好上到 矩阵 突发奇想 用C的数组解矩阵  
算法上有那么点想法 但是 却感觉无从下手

书上写了数组 不能动态定义 这让我很郁闷 不知道高手是怎么解决这个问题的


如果已经有写好的代码  发来 让我参考 参考 我也会不胜感激的!!
搜索更多相关主题的帖子: 突发奇想 不胜感激 大一新生 
2011-10-04 18:42
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
得分:3 
定义一个指针,然后动态申请,如
int *p;
int n;
p=new int[n];
2011-10-04 18:55
hyb472221439
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2011-10-4
得分:0 
回复 2楼 lucky563591
郁闷我还没学指针呢...
2011-10-04 19:16
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:3 
程序代码:
#include <iostream>
#include <cstring>
using namespace std;

class NullPointerException {};
class MemoryException {};
class ArrayIndexOutOfBoundsException {};

class Array {
    int rows;
    int cols;
    int *pArray;
public:
    Array() : rows(0), cols(0), pArray(0) {}
    Array(int r, int c) : rows(r), cols(c)
    {
        pArray = new int[r * c];
        if (!pArray)
            throw MemoryException();
        memset(pArray, 0, sizeof(int) * r * c);
    }
    virtual void modify(int r, int c)
    {
        if (pArray)
            delete []pArray;
        pArray = new int[r * c];
        if (!pArray)
            throw MemoryException();
        memset(pArray, 0, sizeof(int) * r * c);
    }
    virtual ~Array() {
        if (pArray)
            delete []pArray;
    }
    virtual void set(int x, int y, int value)
    {
        if (!pArray)
            throw NullPointerException();
        if (x < 0 || y < 0 || x >= rows || y >= rows)
            throw ArrayIndexOutOfBoundsException();
        *(pArray + (x * cols + y)) = value;
    }
    virtual int get(int x, int y)
    {
        if (!pArray)
            throw NullPointerException();
        if (x < 0 || y < 0 || x >= rows || y >= cols)
            throw ArrayIndexOutOfBoundsException();
        return *(pArray + (x * cols + y));
    }
};

int main()
{
    Array a(5, 5);
    for (int i = 0; i < 5; i++)
        for (int j = 0; j < 5; j++)
            a.set(i, j, i * 5 + j);
    for (int i = 0; i < 5; i++)
        for (int j = 0; j < 5; j++)
            cout << "a.get(" << i << ", " << j << ") = " << a.get(i, j) << endl;
}
这样可以不?

My life is brilliant
2011-10-04 19:50
longwu87
Rank: 2
等 级:论坛游民
帖 子:14
专家分:69
注 册:2011-7-28
得分:3 
别人都说了  只是C的 水平   ,你弄那么多class出来   干嘛呀   
2011-10-04 20:35
hyb472221439
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2011-10-4
得分:0 
回复 4楼 lz1091914999
郁闷...体会下新手的感受好不  给点注释啊
2011-10-04 20:37
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:3 
如果刚开始学的话,不用在意那么多。动态的和静态的有本质上的一些区别。往后学学就知道了。
动态申请是个办法,但是比较麻烦。用 stl 里的 vector 也可以。反正就往后学就行了。
2011-10-04 20:37
hyb472221439
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2011-10-4
得分:0 
回复 7楼 pangding
那么说我现在还解决不了这个问题了
2011-10-04 20:40
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
4楼 帖的估计也是他以前写过的代码,现在加注释也比较麻烦。而且他那里用的东西多了,除了动态申请内存以外,还有异常处理之类的东西。楼主不必过多在意。
2011-10-04 20:40
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
回复 8楼 hyb472221439
总的来说是的,因为可能要用到你后面会学到的东西。

你如果想练,可以就写一个固定大小的。练算法和语法之类的不受这些东西的影响。
2011-10-04 20:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-351583-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.236283 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved