CGrowableArray解析 _ DXUT容器
CGrowableArray的声明 in DXUTmisc.h
//--------------------------------------------------------------------------------------
// A growable array .
//--------------------------------------------------------------------------------------
template<typename TYPE> class CGrowableArray
{
public:
CGrowableArray()
{
m_pData = NULL; m_nSize = ; m_nMaxSize = ;
}
CGrowableArray( const CGrowableArray <TYPE>& a )
{
for( int i = ; i < a.m_nSize; i++ ) Add( a.m_pData[i] );
}
~CGrowableArray()
{
RemoveAll();
} const TYPE& operator[]( int nIndex ) const
{
return GetAt( nIndex );
}
TYPE& operator[]( int nIndex )
{
return GetAt( nIndex );
} CGrowableArray& operator=( const CGrowableArray <TYPE>& a )
{
if( this == &a ) return *this; RemoveAll(); for( int i = ; i < a.m_nSize;
i++ ) Add( a.m_pData[i] ); return *this;
} HRESULT SetSize( int nNewMaxSize );
HRESULT Add( const TYPE& value );
HRESULT Insert( int nIndex, const TYPE& value );
HRESULT SetAt( int nIndex, const TYPE& value );
TYPE& GetAt( int nIndex ) const
{
assert( nIndex >= && nIndex < m_nSize ); return m_pData[nIndex];
}
int GetSize() const
{
return m_nSize;
}
TYPE* GetData()
{
return m_pData;
}
bool Contains( const TYPE& value )
{
return ( - != IndexOf( value ) );
} int IndexOf( const TYPE& value )
{
return ( m_nSize > ) ? IndexOf( value, , m_nSize ) : -;
}
int IndexOf( const TYPE& value, int iStart )
{
return IndexOf( value, iStart, m_nSize - iStart );
}
int IndexOf( const TYPE& value, int nIndex, int nNumElements ); int LastIndexOf( const TYPE& value )
{
return ( m_nSize > ) ? LastIndexOf( value, m_nSize - , m_nSize ) : -;
}
int LastIndexOf( const TYPE& value, int nIndex )
{
return LastIndexOf( value, nIndex, nIndex + );
}
int LastIndexOf( const TYPE& value, int nIndex, int nNumElements ); HRESULT Remove( int nIndex );
void RemoveAll()
{
SetSize( );
}
void Reset()
{
m_nSize = ;
} protected:
TYPE* m_pData; // the actual array of data
int m_nSize; // # of elements (upperBound - 1)
int m_nMaxSize; // max allocated HRESULT SetSizeInternal( int nNewMaxSize ); // This version doesn't call ctor or dtor.
};
CGrowableArray解析 _ DXUT容器的更多相关文章
- C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素
01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...
- cb16a_c++_顺序容器的选用_排序_二分查找
/*cb16a_c++_顺序容器的选用_排序_二分查找顺序容器: 1.vector的优点与缺点 vector优点:排序利用下标,快速排序,做二分查找非常快 2.list的优点与缺点 list优点:插入 ...
- cb14a_c++_顺序容器的操作7_赋值与交换(swap)_vector转list
cb14a_c++_顺序容器的操作7_赋值与交换(swap) vector数据赋值给list, slist.assign(svec.begin(), svec.end());//这样可以转 svec- ...
- ca13a_c++_顺序容器的操作6删除元素
/*ca13a_c++_顺序容器的操作6删除元素c.erase(p) //删除迭代器p指向的位置c.erase(b,e) //删除b to e之间的数据,迭代器b包括,e不包括c.clear()//删 ...
- cb11a_c++_顺序容器的操作4_容器大小操作_resize-max_size
cb11a_c++_顺序容器的操作4 2 容器大小的操作 3 c.size() 容器当前的个数 4 c.max_size(),容器最大存储量 5 c.empty() 是否为空 6 c.resize(n ...
- cb10a_c++_顺序容器的操作3关系运算符
cb10a_c++_cb09a_c++_顺序容器的操作3 2 顺序容器的操作3 3 关系运算符 4 所有的容器类型都可以使用 5 比较的容器必须具有相同的容器类型,double不能与int作比较 6 ...
- cb09a_c++_顺序容器的操作2-在顺序容器中添加元素_插入数据
cb09a_c++_顺序容器的操作2在顺序容器中添加元素vector不能向前插入数据,list可以用insertc.push_back(t);c.push_front(t);c.insert(p,t) ...
- cb08a_c++_顺序容器的操作1
cb08a_c++_顺序容器的操作1容器定义的类型别名begin(闭区间)和end(开区间)成员{first,last)左闭右开,左包括,右不包括,end()指向最后一个的下一个. /*cb08a_c ...
- cb06a_c++_顺序容器的定义
/*cb06a_c++_顺序容器的定义顺序容器:vector,数组,尾端操作数据,快速随机访问list 链表,快速插入数据deque数组,双端-首尾操作数据,方便两端的数据访问 顺序容器适配器:sta ...
随机推荐
- 第4月第1天 makefile automake
1. gnu make的函数调用是$,比如 $(subst ee,EE,feet on the street) 规则中“TARGETS”可以是空格分开的多个文件名 a all: echo $(subs ...
- win7下IIS的安装和配置 图文教程
转自 http://www.jb51.net/article/29787.htm 最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功.在博客里记录一下,给需要的 ...
- 报错注入分析之Extractvalue分析
Extractvalue(这单词略长,拆分记忆法extract:提取物 value:值) 上一篇说的是updatexml.updatexml是修改的.而evtractvalue是查询的. 用法与upd ...
- java中HttpServletRequest常用获取url、资源名等方法总结
HttpServletRequest客户端获取请求,客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中.所以我们能够从对象中获取相应信息 端口 request.get ...
- connect/express 的参考
1.Node.js[5] connect & express简介 对connect中间件的分类比较容易理解. http://www.cnblogs.com/luics/archive/2 ...
- UiAutomator--UiAutomatorHelper快速调试
UiAutomatorHelper使用 1.介绍:他是一种可以快速调试的方法:其本身也是java问津相当于自动化脚本,查看该文件,其主要实现的功能如下 1.创建build:android cre ...
- sublime text 2 快捷键
快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t 重新打开最近关闭文件 ctrl+n 新建文件 c ...
- 创建Odoo8数据库时的“new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)“问题
Odoo8创建数据库时,显示如下错误信息: DataError: new encoding (UTF8) is incompatible with the encoding of the templa ...
- MATLAB求解代数方程、微分方程的一些常用指令
MATLAB版本:R2015b 1.求解符号矩阵的行列式.逆.特征值.特征向量 A = sym('[a11, a12; a21, a22]');deltaA = det(A)invA = inv(A) ...
- iOS 创建模型时自动生成属性
转载 mark666(简书作者), 链接:http://www.jianshu.com/p/63ee533a7705 我们在创建模型的时候,常常要写一大堆恶心的@property(nonatomic, ...