对于任何一门语言而言,多维动态数组总是一个让人有点头疼的问题,一维与二维的设计不一样,顺序访问与随机访问的设计不一样。如果在编程时需要实现高维数组,则又要翻出数据结构的书好好动一翻脑筋。其实中需简单地扩展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]形式。
分享到:
相关推荐
与传统的C/C++数组相比,`CArray`的主要优点在于其可以在运行时动态调整大小,从而更好地满足实际应用的需求。 #### 二、CArray的基本概念 在了解如何使用`CArray`之前,我们需要明确几个基本的概念: 1. **模板...
CArray 是 MFC 库中提供的一种动态数组容器,它基于 C++ 的模板类,能够高效地管理和操作各种数据类型的数组。CArray 提供了丰富的成员函数,方便开发者进行添加、删除、获取和修改数组元素等操作。在C++编程中,...
在压缩包文件“CArray动态数组”中,很可能包含了实现上述功能的C++源代码文件。这些文件可能包括头文件(`.h`或`.hpp`),其中定义了类接口;以及源文件(`.cpp`),实现了类的方法。通过阅读和分析这些代码,我们...
第二个参数为引用类型,一般有两种选择,一种选择与第一个参数类型相同,它意味着数组对象作为参数传递时,传递的是数组对象。第二种选择是第一个参数类型的引用,它意味着数组对象作为参数传递时,传递的是数组对象...
CArray模板类是MFC(Microsoft Foundation Classes)库中提供的一种动态数组容器,它为C++程序员提供了方便的数据存储和管理功能。CArray类是基于STL(Standard Template Library)中vector理念设计的,但更加适合...
CArray是Microsoft Foundation Class (MFC) 库中一个重要的容器类,它是对STL中的std::vector的一种封装,主要用于处理动态数组。CArray提供了一种高效且方便的方式来存储、管理和操作同一类型的数据序列。在本篇...
MFC提供了一个叫做CArray的类,它封装了C++中的动态数组操作,提供了方便且安全的方法来处理可变大小的数据集合。下面将详细解释如何使用MFC的CArray类进行动态数组的创建和操作。 1. **CArray类简介** CArray是...
- 支持多维数组。 - 可以安全地与COM组件交互。 #### CPtrArray - **概述**:CPtrArray用于存储指向任何类型的指针。 - **头文件**:`Afxcoll.h` - **特性**: - 适用于存储不希望自动管理的对象。 #### ...
在C++中,由于没有内置的多维数组类型,我们需要自定义一个。这里我们使用`CArray`模板类,它是MFC提供的一个通用动态数组类,可以容纳任意类型的元素。我们定义一个新的类型`CMy2Array`,它是一个`CArray`,其元素...
2)使用VARIANT数组类似于CArray、vector,也类似与Vb中的动态数组;3)支持CArray、vector与VARIANT的转换(1~4维)。代码适用于VC2012及以上的Windows程序。 使用方法见代码中的CSgxVariant::Test()函数。
1、演示使用动态数组CArray类开发管理系统的过程;动态数组CArray类的项目开发应用
神农远程webservice
CArray 的主要特点是可以动态压缩和扩展数组,数组索引从 0 开始,可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。和 CArray 一样,CArray 索引元素...
该类可以实现比比VC自带的数组类CArray还快的数组类,因为该类使用了内存预分配方式,有效减少系统对内在的存取
总的来说,通过MFC的CArray类,我们可以轻松地处理动态数据,并与UI元素如列表控件进行交互,为用户提供直观的数据展示。这不仅展示了C++面向对象编程的优势,也体现了MFC在Windows应用程序开发中的便利性。通过熟练...
1、讲解和演示CArray类的删除和插入功能的开发过程; 2、讲解CArray类的一些其他功能函数的开发过程;
CArray是MFC框架中用于处理动态数组的一种容器类,它提供了丰富的成员函数来操作数组元素,包括添加、删除、查找、排序等功能,广泛应用于各种需要动态管理数据的场景。在本文中,我们将深入探讨CArray的内部机制...
CArray与静态数组不同,它可以自动扩展和收缩以适应元素数量的变化。当你尝试访问或设置超出当前数组范围的索引时,CArray会自动调整其大小,这使得它在处理不确定大小的数据集时非常有用。 **数组索引** CArray的...