怎么用C++实现动态三维数组?

林泉926 2014-02-22 10:34:53
数组的大小随时可变,需要不断添加或者删除新的元素,用C++该怎么实现呢?vector、list、数组哪个更好呢?
...全文
508 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
airwolf1216 2014-02-25
  • 打赏
  • 举报
回复
其实 list比较好用 要么 你自己写个数据结构出来
瘦又美 2014-02-25
  • 打赏
  • 举报
回复
luotuo44 2014-02-24
  • 打赏
  • 举报
回复
用deque,既可用下标操作,又可以比较高效地删除或添加元素。
jiandingzhe 2014-02-24
  • 打赏
  • 举报
回复
什么叫动态三维数组? 不能用标准库的vector或者list吗?
zhuobattle 2014-02-24
  • 打赏
  • 举报
回复
需要不断添加或者删除新的元素的话,还是用list吧,vector在动态增加和删除方面性能 影响较大。
赵4老师 2014-02-24
  • 打赏
  • 举报
回复
仅供参考
//在堆中开辟一个3×4×5的3维int数组
#include <stdio.h>
#include <malloc.h>
int ***p;
int i,j,k;
void main() {
    p=(int ***)malloc(3*sizeof(int **));
    if (NULL==p) return;
    for (i=0;i<3;i++) {
        p[i]=(int **)malloc(4*sizeof(int *));
        if (NULL==p[i]) return;
        for (j=0;j<4;j++) {
            p[i][j]=(int *)malloc(5*sizeof(int));
            if (NULL==p[i][j]) return;
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                p[i][j][k]=i*20+j*5+k;
            }
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                printf(" %2d",p[i][j][k]);
            }
            printf("\n");
        }
        printf("---------------\n");
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            free(p[i][j]);
        }
        free(p[i]);
    }
    free(p);
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//---------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//---------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//---------------
林泉926 2014-02-24
  • 打赏
  • 举报
回复
引用 12 楼 jack960330 的回复:
type ***a; a=new type[x]; for(int i=0;i<x;i++) { a[i]=new type y; } for(int i=0;i<x;i++) { for(int j=0;j<y;j++) { a[i][j]=new type[y]; } } 或者 vector<vector<vector<type> > > a;
谢谢!
林泉926 2014-02-24
  • 打赏
  • 举报
回复
引用 15 楼 zhuobattle 的回复:
需要不断添加或者删除新的元素的话,还是用list吧,vector在动态增加和删除方面性能 影响较大。
嗯 谢谢 这两天正在看这方面的知识
palm008 2014-02-24
  • 打赏
  • 举报
回复
数组的大小要可以改变,貌似有vector和list比较方便, 又要是三维的,你搞一个符合要求的数据结构不就ok了, 至于vector和list选择哪个,需要分析你对数据的操作特点
赵4老师 2014-02-24
  • 打赏
  • 举报
回复
引用 19 楼 bfdeh 的回复:
[quote=引用 14 楼 zhao4zhong1 的回复:] 仅供参考
//在堆中开辟一个3×4×5的3维int数组
#include <stdio.h>
#include <malloc.h>
int ***p;
int i,j,k;
void main() {
    p=(int ***)malloc(3*sizeof(int **));
    if (NULL==p) return;
    for (i=0;i<3;i++) {
        p[i]=(int **)malloc(4*sizeof(int *));
        if (NULL==p[i]) return;
        for (j=0;j<4;j++) {
            p[i][j]=(int *)malloc(5*sizeof(int));
            if (NULL==p[i][j]) return;
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                p[i][j][k]=i*20+j*5+k;
            }
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                printf(" %2d",p[i][j][k]);
            }
            printf("\n");
        }
        printf("---------------\n");
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            free(p[i][j]);
        }
        free(p[i]);
    }
    free(p);
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//---------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//---------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//---------------
干嘛不直接malloc(3*4*5*sizeof(type))?[/quote] 试试动态改为3*8*5,比较一下谁的数据搬移量少。
bfdeh 2014-02-24
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
仅供参考
//在堆中开辟一个3×4×5的3维int数组
#include <stdio.h>
#include <malloc.h>
int ***p;
int i,j,k;
void main() {
    p=(int ***)malloc(3*sizeof(int **));
    if (NULL==p) return;
    for (i=0;i<3;i++) {
        p[i]=(int **)malloc(4*sizeof(int *));
        if (NULL==p[i]) return;
        for (j=0;j<4;j++) {
            p[i][j]=(int *)malloc(5*sizeof(int));
            if (NULL==p[i][j]) return;
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                p[i][j][k]=i*20+j*5+k;
            }
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                printf(" %2d",p[i][j][k]);
            }
            printf("\n");
        }
        printf("---------------\n");
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            free(p[i][j]);
        }
        free(p[i]);
    }
    free(p);
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//---------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//---------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//---------------
干嘛不直接malloc(3*4*5*sizeof(type))?
朝阳祥和 2014-02-24
  • 打赏
  • 举报
回复
动态数组vector和List http://blog.csdn.net/weiwenhp/article/details/8549086 对你有帮组
欧阳春晖 2014-02-23
  • 打赏
  • 举报
回复
type ***a; a=new type[x]; for(int i=0;i<x;i++) { a[i]=new type y; } for(int i=0;i<x;i++) { for(int j=0;j<y;j++) { a[i][j]=new type[y]; } } 或者 vector<vector<vector<type> > > a;
mujiok2003 2014-02-22
  • 打赏
  • 举报
回复
怎样添加和删除的?
漫步者、 2014-02-22
  • 打赏
  • 举报
回复
采用list吧,比较好。
帅得不敢出门 2014-02-22
  • 打赏
  • 举报
回复
这个需求有点蛋痛,直接malloc一块内存吧。
林泉926 2014-02-22
  • 打赏
  • 举报
回复
引用 9 楼 jianwen0529 的回复:
[quote=引用 7 楼 u011744838 的回复:] [quote=引用 4 楼 sniffer12345 的回复:] vector< vector< vector<int> > > 绝对好使 当然如果你考虑效率的话还是考虑做一个三元哈希吧
谢谢,vector和list有什么区别吗?[/quote] 你直接百度C++ STL随便一篇文章都有提到! 内存结构不一样,就相当于数组和链表,一个内存是连续的(可以使用下标,所以赋值或者取某位置的值效率高,删除元素时,后面的元素要前移),一个是不连续的(删除时可以直接改变指针指向,效率高)![/quote] 嗯 谢谢 我再查查练练
林泉926 2014-02-22
  • 打赏
  • 举报
回复
引用 8 楼 jianwen0529 的回复:
任意位置赋值还是用vector好,效率高! 不过删除这块效率没有list高!
嗯 谢谢 我先试着练习一下
幻夢之葉 2014-02-22
  • 打赏
  • 举报
回复
引用 7 楼 u011744838 的回复:
[quote=引用 4 楼 sniffer12345 的回复:] vector< vector< vector<int> > > 绝对好使 当然如果你考虑效率的话还是考虑做一个三元哈希吧
谢谢,vector和list有什么区别吗?[/quote] 你直接百度C++ STL随便一篇文章都有提到! 内存结构不一样,就相当于数组和链表,一个内存是连续的(可以使用下标,所以赋值或者取某位置的值效率高,删除元素时,后面的元素要前移),一个是不连续的(删除时可以直接改变指针指向,效率高)!
幻夢之葉 2014-02-22
  • 打赏
  • 举报
回复
任意位置赋值还是用vector好,效率高! 不过删除这块效率没有list高!
加载更多回复(4)

64,685

社区成员

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

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