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

简介: 读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];
相关文章
|
JSON 前端开发 API
多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解
理论上array.flat()能做的事情,array.flatMap()都可以做,但是array.flat()更简单,占用内存更少,执行更快。 这个相对冷门一些,w3school上都没有相关教程,看到就是赚到,收藏就是财富! 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助
|
Rust 索引 Windows
Rust 原始类型之数组array内置方法
Rust 原始类型之数组array内置方法
659 0
Rust 原始类型之数组array内置方法
|
存储 JavaScript 索引
TypeScript 中的 Array 类型是什么样的?
TypeScript 中的 Array 类型是什么样的?
281 1
|
SQL IDE Java
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
1036 0
|
JavaScript
ES6对String字符串、Array数组、Number数字、Object对象 类型做了哪些升级优化
ES6对String字符串、Array数组、Number数字、Object对象 类型做了哪些升级优化
277 0
|
JavaScript 前端开发
Array类型(apply)
Array类型(apply)
235 0
|
JavaScript 前端开发
Array类型【call】
Array类型【call】
201 0
|
JavaScript 前端开发 索引
Array类型【find】
Array类型【find】
276 0
|
Web App开发 JavaScript 前端开发
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
559 0
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?

热门文章

最新文章

  • 1
    PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
    327
  • 2
    Java 中数组Array和列表List的转换
    1063
  • 3
    JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
    774
  • 4
    通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据和性能优化,reduce()的使用详解(附实际应用代码)
    1609
  • 5
    通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
    721
  • 6
    通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
    517
  • 7
    多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解
    358
  • 8
    别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性
    356
  • 9
    Array.forEach实战详解:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提高Array.forEach的性能
    239
  • 10
    深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
    842