自己写的CArray类
来源:互联网 发布:中科院软件研究所招聘 编辑:程序博客网 时间:2024/05/17 02:40
myArray.h:
#pragma oncetemplate<typename TYPE, typename TYPE_ARG = const TYPE&>class myArray{public:myArray(void);~myArray(void);private:int m_nSize;//数据长度(也就是实际占用数组的内容的长度)int m_nCount;//资源数量(也就是数组的长度)TYPE* m_pData;public:int GetSize() const//得到数据长度{return m_nSize;}int GetCount()const//得到资源的数量{return m_nCount;}int GetUpperBound( ) const//得到数组实际使用单元下标上界{return m_nCount -1;}TYPE& GetAt(int nIndex) {if (nIndex >= 0 && nIndex < m_nSize){return m_pData[nIndex];}}//只读对象专用,例如:const CArray<xx,xx> &ar;TYPE& GetAt(int nIndex) const{if (nIndex >=0 && nIndex <m_nSize){return m_pData+nIndex;}}TYPE& ElementAt(int nIndex){if (nIndex >= 0 && nIndex < m_nSize){return m_pData[nIndex];}}//只读对象专用,例如:const CArray<xx,xx> &ar;TYPE& ElementAt(int nIndex) const{if (nIndex >= 0 && nIndex < m_nSize){return m_pData[nIndex];}}//只读对象专用,例如:const CArray<xx,xx> &ar;TYPE& operator []( int nIndex ) const{return m_pData[nIndex];}TYPE& operator []( int nIndex ){return m_pData[nIndex];}/************************************************************************//* 以前的版本 const版本返回值是一个对象,现在的版本const版本返回值也是一个对象的引用 *//************************************************************************/void SetAt(int nIndex, TYPE_ARG newElement){if (newElement >=0 && newElement < m_nSize){m_pData[nIndex] = newElement;}}void RemoveAll( ){m_nSize = 0;}TYPE* GetData(){return m_pData;}const TYPE* GetData() const{return m_pData;}public:int Add(TYPE_ARG data );void SetSize( int nNewSize);void ReMalloc(int nCount);void RemoveAt(int nIndex, int nCount = 1);void InsertAt(int nIndex, TYPE_ARG data,int nCount);};
myArray.cpp:
#include "stdafx.h"#include "myArray.h"#include <string.h>template<typename TYPE, typename TYPE_ARG>myArray<TYPE,TYPE_ARG>::myArray(){m_pData=new TYPE[m_nCount=8];m_nSize=0;}template<typename TYPE, typename TYPE_ARG>myArray<TYPE,TYPE_ARG>::~myArray(void){delete []m_pData;}template<typename TYPE, typename TYPE_ARG>void myArray<TYPE,TYPE_ARG>::ReMalloc(int nCount){m_nCount = nCount*2;TYPE* p = new TYPE[m_nCount];memcpy(p,m_pData,sizeof(TYPE)*m_nSize);delete []m_pData;m_pData = p;}template<typename TYPE, typename TYPE_ARG>void myArray<TYPE,TYPE_ARG>::SetSize( int nNewSize){if (nNewSize < 0)nNewSize = 0;m_nSize = nNewSize;if (m_nSize > m_nCount){ReMalloc(m_nSize);}}template<typename TYPE, typename TYPE_ARG>int myArray<TYPE,TYPE_ARG>::Add( TYPE_ARG data ){if (m_nSize >= m_nCount)ReMalloc(m_nSize);m_pData[m_nSize] = data;m_nSize++;return m_nSize;}template<typename TYPE, typename TYPE_ARG>void myArray<TYPE,TYPE_ARG>::RemoveAt(int nIndex, int nCount){if (nIndex > m_nSize)//索引号大于数组实际长度{return;}else if (nIndex + nCount >= m_nSize)//索引号加要移除的数量 大于 数组实际的长度{m_nSize = nIndex;return;}else //索引号加上要移除的数量 小于 数组实际长度{memcpy(m_pData+nIndex,m_pData+nIndex+nCount,sizeof(TYPE)*(m_nSize-nIndex-nCount));m_nSize -= nCount;}}template<typename TYPE, typename TYPE_ARG>void myArray<TYPE,TYPE_ARG>::InsertAt(int nIndex, TYPE_ARG data,int nCount){if (nCount < 0)//插入的数量小于0,直接返回{return;}if (nIndex < 0)//要插入的位置索引小于0,则让索引为0{nIndex = 0;}if (nIndex >= m_nSize)//索引号大于数组实际长度{m_nSize = nIndex+ nCount;if (m_nSize > m_nCount)//比如数组实际长度为8,在索引12的位置插入5个数字,17 > 16{ReMalloc(m_nSize);//扩展内存 17*2 = 34,m_nCount = 34}}else//在实际数组中间插入几个数字{m_nSize = m_nSize + nCount;if (m_nSize>m_nCount){ReMalloc(m_nSize);}memcpy(m_pData+nIndex+nCount,m_pData+nIndex,sizeof(TYPE)*(m_nSize-nIndex));}int i = 0;while (i < nCount){m_pData[nIndex+i] = data;i++;}}
因为是模板,所以使用的时候,要导入myArray.h和myArray.cpp两个文件,或者所有函数都在.h文件当中实现。
0 0
- 自己写的CArray类
- CArray类的学习
- CArray类的方法介绍
- CArray类
- CArray类
- CArray类
- CArray类
- CArray类
- 两个很常用的类CArray,CList
- MFC数组类CArray的使用
- MFC数组类CArray的使用
- 自己写的写日志类
- 自己写的Array类
- 自己写的 string 类
- 自己写的SqlHelper类
- 自己写的分页类
- 自己写的String类
- CArray的用法
- hdu 1869
- python 学习笔记(十一)
- 常用正则表达式
- 学会了认清自己,不是很好,也不算坏
- iOS绘图系列六:利用CAShapeLayer和UIBezierPath或者CGPath绘制想要的图像
- 自己写的CArray类
- BZOJ 3787 Gty的文艺妹子序列 分块+树状数组
- 8.3 使用组合行为
- 1K Xmodem文件传输协议
- CAF(C++ Actor Framework)介绍
- ssh常用用法小结
- [Node.js] Express的测试覆盖率 管理速度审核
- Zend_Mail 邮件发送(SMTP方式)
- Dsymutil Error error: invalid abbreviation code