读boost::multi_array有感,多维数组实现(非类型模板,偏特化)

开发环境:

VS2002(VC7)

本文做如下简化:

1,假定所有维元素都是5。

2,不考虑const的[]。

3,由于只是熟悉原理,不考虑各种异常情况。

问题一,请实现一个一维整形数组,只需重载[]。

问题二,请实现一个二维整形数组,只需重载[]。

源码如下:

class CIntArray1

{

public:

int& operator[](int index)

{

return m_pData[index];

}

protected:

int m_pData[5];

};

class CIntArray2

{

public:

int* operator[](int index)

{

return m_pData[index];

}

protected:

int m_pData[5][5] ;

};

测试程序:

CIntArray1 arr1;

arr1[1] = -1;

int i1 = arr1[1];

CIntArray2 arr2;

arr2[1][1] = -2;

int i2 = arr2[1][1];

三,请实现一个N(2<=n<=10)维整形数组,只需重载[]

template<int iWeiShu>

class CIntArray

{

public:

CIntArray<iWeiShu-1>& operator[](int index)

{

return m_pData[index];

}

protected:

CIntArray<iWeiShu-1> m_pData[5];

};

template<>

class CIntArray<1>

{

public:

int& operator[](int index)

{

return m_pData[index];

}

protected:

int m_pData[5];

};

测试程序

CIntArray<1> a1;

a1[1] = 4;

int x1 = a1[1];

CIntArray<2> a2;

a2[1][1] = 5;

int x2 = a2[1][1];

CIntArray<3> a3;

a3[0][0][0] =9;

int x3 = a3[0][0][0];

时间: 2024-11-08 09:24:39

读boost::multi_array有感,多维数组实现(非类型模板,偏特化)的相关文章

七、二维数组

1.只有一个下标的数组称为一维数组,有两个下标的数组称为二维数组,有N个下标的数组称为n维数组. 2.二维数组定义: 类型说明符 数组名[常量表达式1][常量表达式2] = {值1,值2,...}: int a[2][3] = {{7,6,3},{2,8,5}}; 说明2行3列的数组 3.常量表达式1表示第一维下标的长度 常量表达式2表示第二维下标的长度 4.二维数组的元素也称为双下标变量 5.赋值一般与两层for循环嵌套(双循环)使用.外层循环控制行数,内层循环控制每行对应的列数. 6.二维数

12月28日 二维数组的应用:第一个小游戏(推箱子)

小游戏:******推箱子******** static void Main(string[] args) { int i, j; int[,] a = new int[10, 10]                  //二维数组的定义           类型[,] 数组名 = new  类型 [行数, 列数] {赋值}:   或单个赋值 a[i,j]=1; { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,2,0,0,8,0,0,0,

14-黑马程序员------C 语言学习笔记--- C语言二维数组

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 二 二维数组 01 二维数组的定义: 类型标识符 数组名[常量表达式][常量表达式]; 如:int a[3][4]; 表示定义了一个3行4列的整型二维数组a,含有12个数组元素. 02 二维数组的引用: 数组名[下标][下标]

第34课 多维数组和多维指针

1. 指向指针的指针 (1)指针的本质是变量,会占用一定的内存空间 (2)可以定义指针的指针来保存指针变量的地址值 (3)指针是个变量,同样也存在传值调用与传址调用 [实例分析]遍历二维数组 2. 数组名 (1)一维数组名代表数组首元素的地址:int a[5];a的类型为int* (2)二维数组名同样代表数组首元素的地址:如int a[3][5],a的类型为int(*)[5]. 二维数组 含义及类型 取地址符(&) sizeof 数组名:a ①二维数组名a指向数组首元素的地址,即第1行(a[0]

C语言——二维数组

二维数组 一.二维数组的定义 类型名 数组名[ 常量表达式1 ][ 常量表达式2 ] int a[2][2] 二维数组可以看成是矩阵(或表格),常量表达式1可以看成矩阵(表格)的行数,常量表达式2可以看成矩阵(表格)的列数. 二维数组可以看成一个一维数组a[0],a[1],数组中的元素又是一个个一维数组a[0][0],a[0][1]和a[1][0],a[1][1] 在内存中,二维数组站一系列连续的存储单元.存放的顺序是" 按行存放 " 二.二维数组的初始化 1.赋初值个数与数组元素个数

JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度. 2.处理方式 1).记录数组一共有几行几列,有多少个不同的值 2).把具有不同值的元素的行列及值记录在稀疏数组中,可以缩小程序代码的复杂度. 3.图解描述 稀疏数组表示 [0] 3 4 4 二维数组,3行,4列,4个非0的值: [1] 1 2 2 一行

JAVA描述算法和结构(01):稀疏数组和二维数组转换

本文源码:GitHub·点这里 || GitEE·点这里 一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度. 2.处理方式 1).记录数组一共有几行几列,有多少个不同的值 2).把具有不同值的元素的行列及值记录在稀疏数组中,可以缩小程序代码的复杂度. 3.图解描述 稀疏数组表示 [0] 3 4 4 二维

C#读txt文件并写入二维数组中(txt数据行,列未知)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace 二维数组 { class Program { static void Main(string[] args) { int row = 0;//行 int col = 0;//lie FileStream fs; string path = @"C:\Documents an

【共读Primer】20.&lt;3.6&gt; 多维数组 Page112

C++中的多位数组,严格来说是数组的数组. int ia[3][4]; //大小为3的数组,每个元素是含有4个整数的数组 // 大小为10的数组,每个元素都是大小为20的数组, // 这些数组的元素是含有30个整数的数组 int arr[10][20][30] = {0}; // 将所有元素初始化为 0 初始化多维数组 int ia1[3][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} }; // 以下语句等价于上面的初始化 int ia2[3][4] = {