vc入门宝典(九)
集合类使用心得
MFC提供集合类(Collect)专门负责数据对象的存储和管理,MFC的集合类分为三类,分别用于处理三类不同性质的数据结构:表(List,类似于数据结构的双链表),数组(Array)和映射(Map,具有类似字典的功能).
一,数组使用心得
原型: template< class TYPE, class ARG_TYPE > class CArray : public Cobject
简单地说是你输入的时候用ARG_TYPE类,输出的时候用TYPE,自动实现转换.
具体实现可以看c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h.
如:
#include "afxtempl.h"//那个类需要那些头文件可以查看msdn,在类总括的最后
CArray<int, char> Vars;
Vars.SetSize(3,1);
Vars.SetAt(0,´a´);
int x= Vars.GetAt(0);
这种性质对于自定义类更有效,因为我可以通过重载”=”,来控制改化过程.
设置断点,我们会发现这个类有三个类成员:m_nSize,m_nMaxSize,m_nGrowBy,分别对应元素个数,已经开辟的空间,空间不足时,每次开辟的多少个元素的空间.
常见函数:
int GetSize( ) const得到m_nSize的值.
int GetUpperBound( ) const;数组的上界,m_nSize-1.
void SetSize( int nNewSize, int nGrowBy = -1 );三个类成员都会变,以前加的内容不一定丢失.
void FreeExtra( );整理多余的空间,使m_nMaxSize = m_nSize.
void RemoveAll( );删除全部元素.
TYPE GetAt( int nIndex ) const;得到第nIndex(从0开始)元素的值.
void SetAt( int nIndex, ARG_TYPE newElement ); nIndex不能越界.
const TYPE* GetData( ) const;将数据指针返回.
void SetAtGrow( int nIndex, ARG_TYPE newElement );和SetAt类似,如果过大,会开辟新空间.
int Add( ARG_TYPE newElement );加一个元素,m_nSize加一.
int Append( const CArray& src );//加上一个同类型的数组.
void InsertAt( int nIndex, ARG_TYPE newElement, int nCount = 1 );
void InsertAt( int nStartIndex, CArray* pNewArray );
TYPE& operator []( int nIndex );以c风格操作数组.
TYPE operator []( int nIndex ) const;
其它数组有:
CByteArray 支持字节数组.
CWordArray 支持字数组.
CDWordArray 支持双字节数组.
CObArray 支持COject类型指针数组.
CPtrArray 支持Void类型指针数组.
CUIntArray 支持无符号整形数组.
CStringArray 支持CString数组.
用法与上面基本一致.
二, 表使用心得
我以CStringList为例,谈一下使用表的心得.注意:查看MSDN,实际上看的是CObList,注意相应的类型改成CString类,当然还有一些小差别,具体看vc的提示,最好安装vc_assist6.下面这个例子几乎用到这个类所有的函数.
CStringList var(15);
POSITION position;
position = var.InsertAfter(NULL,"item1");
position = var.InsertAfter(position,"item3");
position = var.InsertBefore(position,"item2");
for( position = var.GetHeadPosition(); NULL != position ; )
AfxMessageBox(var.GetNext(position));
for( position = var.GetTailPosition(); NULL != position ;var.GetPrev(position))
{
CString str;
str = var.GetAt(position);
if("item3"==str)
{
var.RemoveAt(position);
}
else
{
str.MakeUpper();
var.SetAt(position,str);
}
}
var.RemoveHead();
var.RemoveTail();
var.RemoveAll();
var.AddHead("he");
var.AddTail("dan");
position = var.Find("he");
var.SetAt(position,"He");
position = var.FindIndex(1);
var.SetAt(position,"Dan");
//end
下面是该类函数的简介.
POSITION InsertBefore( POSITION position, CObject* newElement );
POSITION InsertAfter( POSITION position, CObject* newElement );
在一个位置前或后插入一个新元素.
POSITION GetHeadPosition( ) const;
POSITION GetTailPosition( ) const;
获得头位置和尾位置.
CObject*& GetNext( POSITION& rPosition );
CObject* GetNext( POSITION& rPosition ) const;
CObject*& GetPrev( POSITION& rPosition );
CObject* GetPrev( POSITION& rPosition ) const;
获得后一元素或前一元素,注意rPosition会变.
CObject*& GetAt( POSITION position );
CObject* GetAt( POSITION position ) const;
根据位置得到元素.
void SetAt( POSITION pos, CObject* newElement );
根据位置设置元素.
void RemoveAt( POSITION position );
根据位置删除元素.
CObject* RemoveHead( );删除并返回头元素
CObject* RemoveTail( ); 删除并返回尾元素
POSITION AddHead( CObject* newElement );增加头元素
void AddHead( CObList* pNewList );在前面加一个表
POSITION AddTail( CObject* newElement );增加尾元素
void AddTail( CObList* pNewList );在后面加一个表
POSITION Find( CObject* searchValue, POSITION startAfter = NULL ) const根据元素值找位置.
POSITION FindIndex( int nIndex ) const根据索引找位置.
- · DSP v1.0--序列化和反序列化对象和DNS v1.0--得到域的邮件服务器
- · C++入门解惑(0)——序
- · 代码自动完成、文档自动生成、提高开发效率----介绍VcExtend
- · “瑜珈山夜话”---序
- · C++入门解惑(1)——浅析cout
- · VC6使用#pragma warning的一点经验
- · 如何在一个容器中放入不同对象(续)
- · “瑜珈山夜话” ----内存分配(一)
- · 最简单的屏幕拷贝程序(象素拷贝)
- · vc入门宝典(十)
- · Win32学习笔记 第六章 程序6-3 Typer 说明
- · 自动建库的安装程序制作方法
- · “瑜珈山夜话” ----内存分配(二)
- · 让Windows 2000/XP中的任意窗口透明起来
- · 不比不知道,一比吓一跳!
- · “瑜珈山夜话” ----内存分配(三)
- · WTL体系结构(3)
- · 控制台程序的事件處理
- · 深入DCOM之DCOM的发展史
- · Windows程序效率
- · C++入门解惑(2)——初探指针(上)
- · 读好文章,快速理解COM组件知识,10分钟深刻阅读,获得超过2000元的培训
- · WTL的消息机制
- · DirectShow应用——支持DVD播放
- · 浏览器集成教学 自定义浏览器
- · 计算机科学与技术学生学习基础材料参考
- · 关于std::list的sort函数在VC6下的修正
- · 数据结构学习(C++)——线性链式结构总结(代后记)【2】
- · 深入DCOM之STA
- · 在COM中使用数组参数-数组指针
- · 在COM中使用数组参数-SafeArray
- · 在COM中使用数组参数-ICollection
- · win2000下“打开”对话框实现2000的风格综述
- · WTL体系结构(4)
- · 深入DCOM之MTA
- · 调试Release版本应用程序
- · 简化异常安全代码
- · Nt/2000/xp平台下的存储控制模型(Access Control Model)
