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 ...
随机推荐
- 两台win7电脑网线直连办法(共享文件夹形式)
一.背景 一台电脑需要测试,但要不停更新APP,可是该电脑没网络,用U盘太繁琐,即想到用网线将两台 电脑直连,一台电脑共享文件夹给另一台电脑,达到交换文件的目的. 感谢Tony(http://www. ...
- plsql配置数据库连接
工具/原料 PL/SQL 方法/步骤 在Oracle的安装文件下查找tnsnames.ora文件,一般路径如: ORACLE_HOME%\network\admin下: 如果真的找不到路径 ...
- Java性能调优之:idea变慢解决
今天搬砖的时候遇到一个问题,idea总是卡死,完全无法愉快的玩耍.幸好机器是Linux系统的.于是通过以下方式解决了问题: 通过top命令,查看系统运行状态发现4个CPU中有1个CPU用户占用率为10 ...
- java基础 super 子类调用父类
如果希望在子类中,去调用父类的构造方法,要求在子类的构造函数调用 example如下: package test; /* * 如果希望在子类中,去调用父类的构造方法,要求在子类的构造函数调用 * */ ...
- Linux安装ftp组件过程
1 安装vsftpd组件 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. [root@bogon ~]# yum -y install vsftpd 2 ...
- TCP/IP 协议中的滑动窗口
一个例子明白发送缓冲区.接受缓冲区.滑动窗口协议之间的关系. 在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例子,由于 ...
- MySQL 备份与恢复
一.备份/恢复策略 考虑因素有: (A) 表的存储引擎是否事务性的,在数据一致性方面不太一样. (B) 确定是全备份还是增量备份, (C) 考虑采取复制的方法做异地备份,复制不能代替备份 (D) 定期 ...
- TKT中文编程语言简介
TKT中文编程语言简介 TKT语言是新型的类似自然语言的汉语编程语言. 它是基于新的语言设计思想创造的语言,和现存的易语言.习语言.O语言.汉编等中文编程语言没有关系. TKT语言特点一: 中文编程 ...
- 移动端web开发的一些知识点
整理一下自己平时移动端web开发中遇到的问题,也参考一下前辈的一些总结 1.最常见的要数1像素边框了 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在dpr=2的retina屏下会显示成 ...
- 取两个String数组的交集
import org.testng.annotations.Test; import java.util.HashMap; import java.util.LinkedList; import ja ...