`
脸同学
  • 浏览: 39441 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

CArray与多维动态数组

阅读更多

对于任何一门语言而言,多维动态数组总是一个让人有点头疼的问题,一维与二维的设计不一样,顺序访问与随机访问的设计不一样。如果在编程时需要实现高维数组,则又要翻出数据结构的书好好动一翻脑筋。其实中需简单地扩展MFC提供的CArray模板类,就可以在C++中很容易地实现任意多维动态数组。

 
根据CArray的使用方法,如下的几行语句似乎就实现了三维动态整型数组:

  typedef CArray<int, int&> DA1;
  typedef CArray<DA1, DA1&> DA2;
  typedef CArray<DA2, DA2&> DA3;
  DA3 da3;

 

  da3

似乎就是一个三维动态整型数组,而且是一个参差数组。但直接这样编译会出错,原因是CArray没有定义“=”运算符。为解决这个问题可以定义一个CArray的导出类。代码如下:

 

  // UltraCArray_T.h
  //
  //////////////////////////////////////////////////////////////////////
  #if !defined(AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_)
  #define AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_
  #if _MSC_VER > 1000
  #pragma once
  #endif // _MSC_VER > 1000
  #include <Afxtempl.h>
  template <class TYPE, class ARG_TYPE>
  class UltraCArray_T : public CArray <TYPE, ARG_TYPE>
  {
  public:
  void operator =(const UltraCArray_T<TYPE, ARG_TYPE> &rhs);

  };

  template <class TYPE, class ARG_TYPE>
  void UltraCArray_T<TYPE, ARG_TYPE>
  ::operator =(const UltraCArray_T<TYPE, ARG_TYPE> &rhs)
  {
  RemoveAll();
  Append(rhs);
  }

  #endif //
  !defined(AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_)

 
 

 

使用UltraCArray_T即可实现任意多维的动态参差数组。代码如下:

  typedef UltraCArray<int, int&> DA1;
  typedef UltraCArray<DA1, DA1&> DA2;
  typedef UltraCArray<DA2, DA2&> DA3;
  DA3 da3;

  

 

此处的da3就是一个三维动态数组。可以使用CArray的任意函数调用,如使用da3[i][j][k]形式。

 

 

分享到:
评论

相关推荐

    MFC中动态数组CArray的使用

    与传统的C/C++数组相比,`CArray`的主要优点在于其可以在运行时动态调整大小,从而更好地满足实际应用的需求。 #### 二、CArray的基本概念 在了解如何使用`CArray`之前,我们需要明确几个基本的概念: 1. **模板...

    C++中CArray动态数组的使用.doc

    CArray 是 MFC 库中提供的一种动态数组容器,它基于 C++ 的模板类,能够高效地管理和操作各种数据类型的数组。CArray 提供了丰富的成员函数,方便开发者进行添加、删除、获取和修改数组元素等操作。在C++编程中,...

    数据结构中的动态数组模版类

    在压缩包文件“CArray动态数组”中,很可能包含了实现上述功能的C++源代码文件。这些文件可能包括头文件(`.h`或`.hpp`),其中定义了类接口;以及源文件(`.cpp`),实现了类的方法。通过阅读和分析这些代码,我们...

    MFC的数组类CArray使用详解-赞

    第二个参数为引用类型,一般有两种选择,一种选择与第一个参数类型相同,它意味着数组对象作为参数传递时,传递的是数组对象。第二种选择是第一个参数类型的引用,它意味着数组对象作为参数传递时,传递的是数组对象...

    CArray模板类的应用举例

    CArray模板类是MFC(Microsoft Foundation Classes)库中提供的一种动态数组容器,它为C++程序员提供了方便的数据存储和管理功能。CArray类是基于STL(Standard Template Library)中vector理念设计的,但更加适合...

    MFC数组类CArray

    CArray是Microsoft Foundation Class (MFC) 库中一个重要的容器类,它是对STL中的std::vector的一种封装,主要用于处理动态数组。CArray提供了一种高效且方便的方式来存储、管理和操作同一类型的数据序列。在本篇...

    MFC.develop.create.dynamic.arrays.rar_动态数组

    MFC提供了一个叫做CArray的类,它封装了C++中的动态数组操作,提供了方便且安全的方法来处理可变大小的数据集合。下面将详细解释如何使用MFC的CArray类进行动态数组的创建和操作。 1. **CArray类简介** CArray是...

    CArray,Clist全部有关数组、列表、映射类

    - 支持多维数组。 - 可以安全地与COM组件交互。 #### CPtrArray - **概述**:CPtrArray用于存储指向任何类型的指针。 - **头文件**:`Afxcoll.h` - **特性**: - 适用于存储不希望自动管理的对象。 #### ...

    CStringArray二维数组的定义和操作

    在C++中,由于没有内置的多维数组类型,我们需要自定义一个。这里我们使用`CArray`模板类,它是MFC提供的一个通用动态数组类,可以容纳任意类型的元素。我们定义一个新的类型`CMy2Array`,它是一个`CArray`,其元素...

    SegeX SgxVariant:VC封装支持多维数组的变体类型(VRIANT 、SafeArray)(免费免积分)

    2)使用VARIANT数组类似于CArray、vector,也类似与Vb中的动态数组;3)支持CArray、vector与VARIANT的转换(1~4维)。代码适用于VC2012及以上的Windows程序。 使用方法见代码中的CSgxVariant::Test()函数。

    吕鑫:【C++语法与数据结构第12天】【第1堂课】动态数组CArray类的项目开发应用

    1、演示使用动态数组CArray类开发管理系统的过程;动态数组CArray类的项目开发应用

    神农远程webservice

    神农远程webservice

    CArray详解例子说明

    CArray 的主要特点是可以动态压缩和扩展数组,数组索引从 0 开始,可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。和 CArray 一样,CArray 索引元素...

    比VC自带的数组类还快的数组类

    该类可以实现比比VC自带的数组类CArray还快的数组类,因为该类使用了内存预分配方式,有效减少系统对内在的存取

    MFC数组类CArray动态初始化列表控件实例

    总的来说,通过MFC的CArray类,我们可以轻松地处理动态数据,并与UI元素如列表控件进行交互,为用户提供直观的数据展示。这不仅展示了C++面向对象编程的优势,也体现了MFC在Windows应用程序开发中的便利性。通过熟练...

    吕鑫:【C++语法与数据结构第13天】【第1堂课】动态数组CArray类的深入开发(面试题)

    1、讲解和演示CArray类的删除和插入功能的开发过程; 2、讲解CArray类的一些其他功能函数的开发过程;

    CArray 详解

    CArray是MFC框架中用于处理动态数组的一种容器类,它提供了丰富的成员函数来操作数组元素,包括添加、删除、查找、排序等功能,广泛应用于各种需要动态管理数据的场景。在本文中,我们将深入探讨CArray的内部机制...

    CArray详解.doc

    CArray与静态数组不同,它可以自动扩展和收缩以适应元素数量的变化。当你尝试访问或设置超出当前数组范围的索引时,CArray会自动调整其大小,这使得它在处理不确定大小的数据集时非常有用。 **数组索引** CArray的...

Global site tag (gtag.js) - Google Analytics