afu

afu

0个粉丝

18

问答

0

专栏

3

资料

afu  发布于  2008-08-02 00:59:08
采纳率 0%
18个问答
3363

动态二维三维数组

   
#include <stdio.h>
#include <malloc.h>

// pre-declaration
template < class T, bool bInternal > class Array3;

// template class Array2
template <class T, bool bInternal=false>
class Array2 {
public:
    typedef Array2<T, bInternal> _Myt;
    typedef T value_type;
    typedef T* pointer;
    typedef const T* const_pointer;
    typedef T& reference;
    typedef const T& const_reference;

    Array2(int x, int y) : a(x), b(y) {
        data = (pointer)malloc(sizeof(value_type)*x*y);
    }
    ~Array2() {
        if(!bInternal)
            free(data);
    }
    pointer operator [] (int i) {
        ASSERT(i>= 0 && i < a);
        return data + i * b;
    }
    const_pointer operator [] (int i) const {
        ASSERT(i>= 0 && i < a);
        return data + i * b;
    }
protected:
    // used in template class Array3
    Array2(value_type* ptr, int x, int y) : data(ptr), a(x), b(y) {
    };

    pointer data;
    int     a, b;

    friend  Array3<T, true>;
    friend  Array3<T, false>;
};

// template class Array3
template <class T, bool bInternal=false>
class Array3 {
public:
    typedef Array3<T, bInternal> _Myt;
    typedef Array2<T, true> a2type;
    typedef const Array2<T, true> const_a2type;
    typedef T value_type;
    typedef T* pointer;
    typedef const T* const_pointer;
    typedef T& reference;
    typedef const T& const_reference;

    Array3(int x, int y, int z) : a(x), b(y), c(z) {
        data = (pointer)malloc(sizeof(value_type)*x*y*z);
    }
    ~Array3() {
        if(!bInternal)
            free(data);
    }
    a2type operator [] (int i) {
        ASSERT(i>= 0 && i < a);
        return a2type(data + i * b * c, b, c);
    }
    const_a2type operator [] (int i) const {
        ASSERT(i>= 0 && i < a);
        return a2type(data + i * b * c, b, c);
    }
protected:
    // used in template class Array4
    Array3(value_type* ptr, int x, int y, int z) : data(ptr), a(x), 
        b(y), c(z) {
    };

    pointer data;
    int     a, b, c;
};

int main(int argc, char* argv[])
{
    Array3<int> a3(4, 3, 2);
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<3;j++)
        {
            for(int k=0;k<2;k++)
            {
                printf("&a[%d][%d][%d] = %p\n", i, j, k, &a3[i][j][k]);
            }
        }
    }
    return 0;
}

还不是很完善

照样子也容易写出动态的四维数组实现,不过可能实际意义不大

如果需要,自己照葫芦画瓢吧,反正不难

我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区