博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vc入门宝典(九) (转)
阅读量:2498 次
发布时间:2019-05-11

本文共 3543 字,大约阅读时间需要 11 分钟。

vc入门宝典(九) (转)[@more@]

集合类使用心得

/develop/author/netauthor/he_zhidan/">何志丹

MFC提供集合类(Collect)专门负责数据的和管理,MFC的集合类分为三类,分别用于处理三类不同性质的数据结构:表(List,类似于数据结构的双链表),数组(Array)和映射(Map,具有类似字典的功能).:namespace prefix = o ns = "urn:schemas--com::office" />

一,数组使用心得

原型: template< class TYPE, class ARG_TYPE > class CArray : public C

简单地说是你输入的时候用ARG_TYPE类,输出的时候用TYPE,自动实现转换.

具体实现可以看c:program filesmicrosoft vc98mfcincludeafxtempl.h.

如:

#include "afxtempl.h"//那个类需要那些头可以查看msdn,在类总括的最后

CArray  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   支持字节数组.

CArray    支持字数组.

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根据找位置.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-958598/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-958598/

你可能感兴趣的文章
python3安装scrapy
查看>>
python正则表达式入门一
查看>>
python正则表达式入门二
查看>>
scrapy运行
查看>>
XPATH入门
查看>>
python爬虫 CSS选择器
查看>>
正常关闭java程序
查看>>
查看linux核心数
查看>>
数据结构与算法三: 数组
查看>>
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
PHP empty、isset、innull的区别
查看>>
apache+nginx 实现动静分离
查看>>
通过Navicat远程连接MySQL配置
查看>>
phpstorm开发工具的设置用法
查看>>