目的:熟悉c++动态内存分配

描述:使用c++程序定义动态数组类,使用new和delete操作符实现动态二维数组和三维数组的定义

//main.cpp

//主程序类

#include <iostream>
#include "DynamicArray.h"
#include "DynamicArray3d.h"
using namespace std; int main()
{
cout < < "Hello world!" << endl;
DynamicArray a;
a.printArray();
DynamicArray3d b;
b.printArray();
return 0;
}

//DynamicArray.h

//二维数组头文件

#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H
#include <iostream>
using namespace std;
class DynamicArray
{
public:
DynamicArray(int m=5,int n=5);
~DynamicArray();
void printArray();
private:
int **m_pArray;
int m_iSize;
int n_iSize;
}; #endif

//DynamicArray.cpp

//二位数组源文件

#include "DynamicArray.h"

DynamicArray::DynamicArray(int m,int n)
{
int i,j;
m_iSize=m;
n_iSize=n;
m_pArray = new int* [m_iSize];
for (i = 0; i < m_iSize; i++)
m_pArray [i] = new int[n_iSize];
for (i = 0; i < m_iSize; i++)
for (j = 0; j < n_iSize; j++)
{
m_pArray[i][j]=i+10*j;
}
} DynamicArray::~DynamicArray()
{
for (int i = m_iSize; i > 0;)
delete[] m_pArray[--i];
delete[] m_pArray;
}
void DynamicArray::printArray()
{
int i,j;
cout < < "Print Array:" << endl;
for (i = 0; i < m_iSize; i++)
{
for(j = 0; j < n_iSize; j++)
cout<<m_pArray [i][j]<<" ";
cout<<endl;
} }

//DynamicArray3d.h

//三维数组头文件

#ifndef DYNAMICARRAY3D_H
#define DYNAMICARRAY3D_H
#include <iostream>
using namespace std; class DynamicArray3d
{
public:
DynamicArray3d(int m=5,int n=5,int o=5);
~DynamicArray3d();
void printArray();
private:
int ***m_pArray;
int m_iSize;
int n_iSize;
int o_iSize;
}; #endif

//三维数组源文件


#include "DynamicArray3d.h" DynamicArray3d::DynamicArray3d(int m,int n,int o)
{
int i,j,k ;
m_iSize=m;
n_iSize=n;
o_iSize=o;
m_pArray= new int**[m_iSize] ;
for( i = 0 ; i < m_iSize ; i ++ )
m_pArray[i] = new int*[n_iSize] ;
for( i = 0 ; i < m_iSize ; i ++ )
for( j = 0 ; j < n_iSize ; j ++ )
m_pArray[i][j] = new int[o_iSize ] ;
for(i = 0 ; i <m_iSize ; i ++ )
for(j = 0 ; j < n_iSize ; j ++ )
for( k = 0 ; k < o_iSize ; k ++)
m_pArray[i][j][k] = i*100+j*10+k;
} DynamicArray3d::~DynamicArray3d()
{ } void DynamicArray3d::printArray()
{
int i,j,k ;
for(i = 0 ; i <m_iSize ; i ++ )
{
for(j = 0 ; j < n_iSize ; j ++ )
{
for( k = 0 ; k < o_iSize ; k ++)
cout<<m_pArray[i][j][k]<<" ";
cout<<" ";
}
cout<<endl;
} }

本文原创,转载请注 狮子座流星

C++ 动态分配二维和三维数组的更多相关文章

  1. three+pixi 将二维和三维结合

    PIXI+THREE 使用 PIXI 和 THREE 将三维和二维渲染在同一个 canvas 下面 效果 思路 初始化 PIXI 的 Application, 作为 pixi 最重要的变量 const ...

  2. Java 一维数组 二维数组 三维数组

    二维数组包含一位数组  三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推.   下面是 一维 二维 三维数组例子   一维数组: int[] array1 ...

  3. VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统

    一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...

  4. C语言malloc函数为一维,二维,三维数组分配空间

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  5. python如何删除二维或者三维数组/列表中某维的空元素

    如题,个人在使用python进行数据预处理过程中出现的问题,抽象成删除三维列表中某维为空的问题. 一.首先来看一下三维数组/列表的结构 仔细看下图就会很清楚了: 轴0即是去除第一个外括号后第一层(我把 ...

  6. 三维数组——与 宝玉QQ群讨论交流之二

    宝玉 12:27:35 这几天看了大部分大家交的作业,发现一个主要问题还是卡在对三维数组的理解上,之前把三维数组类比成三维空间可能会造成误导 宝玉 12:27:45 其实鞠老师解释的很好: 三维数组 ...

  7. 二维数组 cudaMallocPitch() 和三维数组 cudaMalloc3D() 的使用

    ▶ 使用函数 cudaMallocPitch() 和配套的函数 cudaMemcpy2D() 来使用二维数组.C 中二维数组内存分配是转化为一维数组,连贯紧凑,每次访问数组中的元素都必须从数组首元素开 ...

  8. numpy中三维数组转变成二维数组

    numpy中reshape()函数对三维数组进行转换成二维数组,见下面例子: >>>a=np.reshape(np.arange(18),(3,3,2)) >>> ...

  9. php基础------将二维数组转三维数组

    将二维数组转为三维数组 /** * 二维数组转三维数组(指定键为三维数组的键名) * @param [type] $arr [要排序的数组] * @param [type] $key [指定的键] * ...

随机推荐

  1. xargs的i参数

    xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如 # find . -type f -name "*.log" | xargs rm -rf * ...

  2. Matplotlib 库 : 绘图和可视化

    一.Matplotlib基础知识 1.1Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y ...

  3. pandas入门学习--------------------------(一)

    使用pandas,首先需要熟悉它的2个主要的数据结构:Series和DataFrame. Series series是一种类似于一维数组的的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关 ...

  4. 「小程序JAVA实战」小程序的基础组件(24)

    转自:https://idig8.com/2018/08/12/xiaochengxu-chuji-24/ 来说下 ,小程序的基础组件.源码:https://github.com/limingios/ ...

  5. HTTP请求类

    package com.paytest.util; import java.io.BufferedReader; import java.io.IOException; import java.io. ...

  6. Linux运维常见故障排查和处理的33个技巧汇总

    作为linux运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个Linux运维工程师良好的习惯.每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着 ...

  7. TortoiseSVN文件夹及文件图标不显示解决方法(兼容Window xp、window7)

    最近遇到TortoiseSVN图标(如上图:增加文件图标.文件同步完成图标等)不显示问题,网上找到的解决方法试了很多都无法真正解决,最后总结了一下,找到了终极解决方案,当然此方案也有弊端,接下来我们就 ...

  8. 留用 未验证 js适配根字体大小

    方法一:<script>                (function (doc, win) {                var docEl = doc.documentElem ...

  9. onlevelwasloaded的调用时机

    并不是任何场景加载完成后都会触发该事件,必须使用场景加载API才能触发onlevelwasloaded函数,场景加载API如 scenemanager.loadscene等,additive模式不触发 ...

  10. LUA和C#关于字符串中\0的处理

    LUA中: local s = "hello\0\0dddddddd" print(s) --hello C#中: string s = "hello\0\0dddddd ...