CStringList用法

news/2024/7/17 3:20:41 标签: 数据结构, mfc, null, class, list, 存储
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

MFC提供集合类(Collect)专门负责数据对象的存储和管理,MFC的集合类分为三类,分别用于处理三类不同性质的class="tags" href="/tags/ShuJuJieGou.html" title=数据结构>数据结构:表(List,类似于class="tags" href="/tags/ShuJuJieGou.html" title=数据结构>数据结构的双链表),数组(Array)和映射(Map,具有类似字典的功能).

一,数组使用心得

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

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

具体实现可以看c:/program files/microsoft visual studio/vc98/class="tags" href="/tags/MFC.html" title=mfc>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根据索引找位置.


http://www.niftyadmin.cn/n/1404100.html

相关文章

开漏(open drain)和开集(open collector)的概念

在电路设计时我们常常遇到开漏&#xff08;open drain&#xff09;和开集&#xff08;open collector&#xff09;的概念。 所谓开漏电路概念中提到的“漏”就是指MOSFET的漏极。同理&#xff0c;开集电路中的“集”就是指三极管的集电极。开漏电路就是指以MOSFET的漏极为输出…

js常用键盘事件以及执行顺序

e.keyCode返回按下键的ascii值 keydown->keypress->keyup <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>//执行顺序keydown-…

CSS Diner

&#xff08;第一次发博客&#xff09; 之前关于选择器的概念有点陌生&#xff0c;因为 一个偶然的机会&#xff0c;我发现了这个页面。 我做了一天才完成&#xff0c;现在感觉对选择器有了基本的了解&#xff0c;跟大家分享一下。 小白的话&#xff0c;可以参考一下&#xff1…

怎样使 WinXP 启动时不用输入用户名和密码即自动进入系统到桌面?

在Windows XP中单击“开始→运行”&#xff0c;输入“rundll32 netplwiz.dll,UsersRunDll”&#xff08;注意大小写及空格&#xff09;&#xff0c;然后进入“用户账户”操作窗口&#xff0c;取消对“要使用本机&#xff0c;用户必须输入用户名及密码”项的选择。在接下来弹…

js模拟京东按下s键后自动进入输入框

<input type"text"> <script>var search document.querySelector(input);document.addEventListener(keyup, function (e) {if (e.keyCode 83) {search.focus();}}) </script>案例:模拟京东快递单号查询 <!DOCTYPE html> <html lang&…

简易登录界面

看了几天的视频教学&#xff0c;只是做了这样的简单网页&#xff0c;适合小白做做练习&#xff0c;大佬可以的话给我提点建议&#xff0c;感谢&#xff01; 以下是相关代码&#xff1a; 1、布局 <!DOCTYPE html> <html><head><meta charset"utf-8…

什么是BOM

BOM(Browser Object Modtael)是一种浏览器对象模型,提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window BOM由一系列对象组成,每个对象都提供了很多方法与属性 BOM缺乏标准 ,JavaScript语法的标准化组织是ECMA, DOM的标准化组织是w3c,BOM最初是Netscape浏览器标…

Wince中的文件操作

序言 Wince中的文件操作使用传统的基于句柄的方法&#xff1b;文件通过返回句柄的函数打开&#xff1b;读取和写入函数被传递句柄以便指出要操作的函数&#xff1b;数据在文件中读取和写入的偏移量由系统维护的文件指针来指出&#xff1b;最后当读取和写入完成时&#xff0c;应…