通用库动态数组模板类

///通用库动态数组模板类
/**
 * 通用库4.0版<br>
 * 这里定义了一个动态数组模板类。这次将以前的XDyanmicArray和XArray合并成一个XArray了。
 * 除此之外,增加了数组元素初始化为0的操作,同时,会执行数组元素默认的构造函数和析造函数。
 * 同样,这个动态数组比较适合元数据中没有指针数据成员的元素或额外使用资源的元素。
 * 对于使用对象为数组元素的数组,可以使用XObjectArray模板类,可以有效的解决问题。
 * @author zdhsoft(祝冬华)
 * @version 4.0
 * @date 2008-03-01
 * @file xarray.h
 * @test 已经经过测试
*/
#ifndef _X_ARRAY_H_
#define _X_ARRAY_H_
#include <xcommon.h>
#include <xexception.h>
namespace zdh
{
 const XInt ARRAY_INVALID_INDEX = -1;
 ///数组模板类
 template<class T>
 class XArray
 {
 public:
  typedef T ElementType;
  typedef ElementType * PElementType;
  ///缺省构造函数
  XArray()
   :m_Length(0),m_Capacity(0),m_Data(NULL)
  {}
  ///指定初始元素个数的构造函数
  /**
   @param [in] aInitLength 初始化数组的大小
  */
  XArray(XInt aInitLength)
   :m_Length(0),m_Capacity(0),m_Data(NULL)
  {
   if( aInitLength > 0)
   {
    InitLength(aInitLength);
   }
  }
  ///指定初始元素个数以及缺省元素值的构造函数
  /**
   @param [in] aInitLength 初始化数组的大小
   @param [in] aDefault 初始化数组元素的默认值
  */
  XArray(XInt aInitLength,const T & aDefault)
   :m_Length(0),m_Capacity(0),m_Data(NULL)
  {
   if( aInitLength > 0)
   {
    InitLength(aInitLength,aDefault);
   }
  }
  ///缺省拷贝构造函数
  XArray(const XArray<T> & v);
  ///指定大小以及初始元素指针的构造函数
  XArray(const T * pData,XInt aSize,XInt aStartIndex = 0);
  ///指定大小以及初始元素数组的构造函数
  XArray(const XArray<T> & v,XInt aSize,XInt aStartIndex = 0);
  ///析造函数
  ~XArray

时间: 2024-09-17 03:13:08

通用库动态数组模板类的相关文章

通用库动态集合模板类

  /**////通用库动态集合模板类/**//** * 通用库4.0版<br> * 这是一个集合类,这个类的元素存放是一个有序的数组.这个类的元素查找方法为二分查找. * 这个类提供了类相关的所有功能.集合的方法有交集*,并集+,差集-,除此之后,还有*=,+=,-=等对应方法. * 集合类通过Contains,检查指定元素是否在集合中 * @author zdhsoft(祝冬华) * @version 4.0 * @date 2008-04-01 * @file xset.h */#ifn

通用库动态对象数组模板类

///通用库动态对象数组模板类/** * 通用库4.0版<br> * 这里定义了一个动态对象数组模板类.这个数组适合不能移动的对象或含有指针或被引用的对象. * 特点就是,不会像XArray中一样,调整数组容量,会造所有数组元素地址都发生变化. * @author zdhsoft(祝冬华) * @version 4.0 * @date 2008-03-01 * @file xobjectarray.h */#ifndef _X_OBJECT_ARRAY_H_#define _X_OBJECT_

实现真正意义上的二维动态数组模板

我们可以通过动态数组的反例来确定动态数组应该具有哪些特性.大家都知道以下的方式是定义一个静态数组. int iCount[10]; int iCount[10][10]; 从上面可以看出,定义了静态数组之后,无论程序如果使这个数组,该数组在内存中所占空间的大小,位置是确定不变的. 我们可以得出结论,对于编译器,静态数组的大小和空间是已知的,因此编译器可以自动为该数组分配空间.具体情况是:如果你定义了一个全局数组,编译器将在数据区为你的数组分配一个空间:如果是个局部数组(比如定义在某一个局数中),

C++ 自定义动态数组模板

#include "stdafx.h" #include <iostream> using namespace std; template <class T> class MyArray { int len; public: T *data; MyArray() { data = NULL; len = 0; } ~MyArray() { delete[] data; } T& operator [](int index); void push(T d)

C++动态数组类的封装实例_C 语言

C++中的动态数组(Dynamic Array)是指动态分配的.可以根据需求动态增长占用内存的数组.为了实现一个动态数组类的封装,我们需要考虑几个问题:new/delete的使用.内存分配策略.类的四大函数(构造函数.拷贝构造函数.拷贝赋值运算符.析构函数).运算符的重载.涉及到的知识点很多,对此本文只做简单的介绍. 一.内存分配策略 当用new为一个动态数组申请一块内存时,数组中的元素是连续存储的,例如 vector和string.当向一个动态数组添加元素时,如果没有空间容纳新元素,不可能简单

通用库Map模板类

///通用库Map模板类/** * 通用库4.0版<br> * 这是一个映射类,提供基本的Map功能,这个映射是基于动态有序数组,查找方式用二分查找.<br> * 主要的方法有operator[],getValue(),getKey(),operator=,getLength(),RemoveByKey(),RemoveByIndex(),Clear(),Contains()等方法<br> * 除此之外,还提了一些类数组的方法.getCapaity(),getFirst

C++技巧之二维动态数组类模板

C++提供了许多强大的机制来实现代码的高度复用.来使我们使用我们自已的类就像使用内置类型那样方便快捷.比如模板,运算符重载等等.模板好比如是一个大批量生产函数和类的工厂,使我们不用再去关心与数据类型相关的繁琐编程细节,把我们精力留给那些真正值得我们去认真思考的地方.而运算符重载则使我们的程序更直观更简洁,这不仅使我们更容易读懂我们的程序,而且使我们能以一种更为流畅的方式来表达我们的想法.就像上篇文章说到的,如果我们把动态分配的二维数组用类模板实现,并重载相应的操作符,我们就能十分方便的使用我们自

《21天学通C++(第7版)》——第17章 STL动态数组类

第17章 STL动态数组类 21天学通C++(第7版)动态数组让程序员能够灵活地存储数据,无需在编写应用程时就知道数组的长度.显然,这是一种常见的需求,标准模板库(STL)通过std::vector类提供了现成的解决方案. 在本章中,您将学习: std::vector的特点:典型的vector操作:vector的大小与容量:STL deque类.本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

ASP 通用模板类

模板 ASP 通用模板类. 适合存在较少循环的模板.未实现内部循环,需要使用正则表达式,较浪费资源和时间,如需使用可参考这篇文章. 特性可设定私有缓存或公共缓存,提高效率可自由选择使用 Stream 组件或 FSO 组件支持自定义文件编码可保存文件 属性 Name文本,该模板名称,主要用于使用公共缓存时区分不同模板. Format文本,文件编码类型,可设置值. Object文本,使用组件,可设置值: StreamFSO PublicCache布尔值,使用公共缓存,开启时模板文件将保存到Appli