资讯详情

vc入门宝典(九)

📅 2026/10/21 1:17:29 | 华诺云谱 👁 阅读
vc入门宝典(九)
集合类使用心得MFC提供集合类(Collect)专门负责数据对象的存储和管理,MFC的集合类分为三类,分别用于处理三类不同性质的数据结构:表(List,类似于数据结构的双链表),数组(Array)和映射(Map,具有类似字典的功能).一,数组使用心得原型:template classTYPE, classARG_TYPE class CArray : public Cobject简单地说是你输入的时候用ARG_TYPE类,输出的时候用TYPE,自动实现转换.具体实现可以看c:/program files/microsoft visual studio/vc98/mfc/include/afxtempl.h.如:#includeafxtempl.h//那个类需要那些头文件可以查看msdn,在类总括的最后CArrayint,char Vars;Vars.SetSize(3,1);Vars.SetAt(0,a);intx Vars.GetAt(0);这种性质对于自定义类更有效,因为我可以通过重载””,来控制改化过程.设置断点,我们会发现这个类有三个类成员:m_nSize,m_nMaxSize,m_nGrowBy,分别对应元素个数,已经开辟的空间,空间不足时,每次开辟的多少个元素的空间.常见函数:int GetSize( ) const得到m_nSize的值.int GetUpperBound( ) const;数组的上界,m_nSize-1.void SetSize( intnNewSize, intnGrowBy -1 );三个类成员都会变,以前加的内容不一定丢失.void FreeExtra( );整理多余的空间,使m_nMaxSize m_nSize.void RemoveAll( );删除全部元素.TYPEGetAt( intnIndex) const;得到第nIndex(从0开始)元素的值.void SetAt( intnIndex,ARG_TYPEnewElement);nIndex不能越界.constTYPE* GetData( ) const;将数据指针返回.void SetAtGrow( intnIndex,ARG_TYPEnewElement);和SetAt类似,如果过大,会开辟新空间.int Add(ARG_TYPEnewElement);加一个元素,m_nSize加一.int Append( const CArraysrc);//加上一个同类型的数组.void InsertAt( intnIndex,ARG_TYPEnewElement, intnCount 1 );void InsertAt( intnStartIndex, CArray*pNewArray);TYPE operator []( intnIndex);以c风格操作数组.TYPEoperator []( intnIndex) 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(item3str){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根据索引找位置.计算几何为骨排样优化为魂作品一亲士套料工具箱https://qinshi.blog.csdn.net/article/details/167222655作品二亲士CAD工具箱https://qinshi.blog.csdn.net//article/details/156510081经典文章推荐二维排样https://qinshi.blog.csdn.net/article/details/164169163万物皆数学https://qinshi.blog.csdn.net/article/details/143057305查阅鄙人的博文请点击博文下载学院导航https://qinshi.blog.csdn.net/article/details/163717324活到老学到老。明朝中后期大约50%的进士能当上堂官(副部及更高)能当上堂官的举人只有十余人。子墨子言之事无终始无务多业。也就是我们常说的专业的人做专业的事。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑