vc++入門(mén)寶典
發(fā)布時(shí)間:2008-08-06 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
MFC提供集合類(lèi)(Collect)專(zhuān)門(mén)負(fù)責(zé)數(shù)據(jù)對(duì)象的存儲(chǔ)和管理,MFC的集合類(lèi)分為三類(lèi),分別用于處理三類(lèi)不同性質(zhì)的數(shù)據(jù)結(jié)構(gòu):表(List,類(lèi)似于數(shù)據(jù)結(jié)構(gòu)的雙鏈表),數(shù)組(Array)和映射(Map,具有類(lèi)似字典的功能).
一,數(shù)組使用心得
原型: template< class TYPE, class ARG_TYPE > class CArray : public Cobject
簡(jiǎn)單地說(shuō)是你輸入的時(shí)候用ARG_TYPE類(lèi),輸出的時(shí)候用TYPE,自動(dòng)實(shí)現(xiàn)轉(zhuǎn)換.
具體實(shí)現(xiàn)可以看c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h.
如:
#include "afxtempl.h"//那個(gè)類(lèi)需要那些頭文件可以查看msdn,在類(lèi)總括的最后
CArray<int, char> Vars;
Vars.SetSize(3,1);
Vars.SetAt(0,'a');
int x= Vars.GetAt(0);
這種性質(zhì)對(duì)于自定義類(lèi)更有效,因?yàn)槲铱梢酝ㄟ^(guò)重載”=”,來(lái)控制改化過(guò)程.
設(shè)置斷點(diǎn),我們會(huì)發(fā)現(xiàn)這個(gè)類(lèi)有三個(gè)類(lèi)成員:m_nSize,m_nMaxSize,m_nGrowBy,分別對(duì)應(yīng)元素個(gè)數(shù),已經(jīng)開(kāi)辟的空間,空間不足時(shí),每次開(kāi)辟的多少個(gè)元素的空間.
常見(jiàn)函數(shù):
int GetSize( ) const得到m_nSize的值.
int GetUpperBound( ) const;數(shù)組的上界,m_nSize-1.
void SetSize( int nNewSize, int nGrowBy = -1 );三個(gè)類(lèi)成員都會(huì)變,以前加的內(nèi)容不一定丟失.
void FreeExtra( );整理多余的空間,使m_nMaxSize = m_nSize.
void RemoveAll( );刪除全部元素.
TYPE GetAt( int nIndex ) const;得到第nIndex(從0開(kāi)始)元素的值.
void SetAt( int nIndex, ARG_TYPE newElement ); nIndex不能越界.
const TYPE* GetData( ) const;將數(shù)據(jù)指針?lè)祷?
void SetAtGrow( int nIndex, ARG_TYPE newElement );和SetAt類(lèi)似,如果過(guò)大,會(huì)開(kāi)辟新空間.
int Add( ARG_TYPE newElement );加一個(gè)元素,m_nSize加一.
int Append( const CArray& src );//加上一個(gè)同類(lèi)型的數(shù)組.
void InsertAt( int nIndex, ARG_TYPE newElement, int nCount = 1 );
void InsertAt( int nStartIndex, CArray* pNewArray );
TYPE& operator []( int nIndex );以c風(fēng)格操作數(shù)組.
TYPE operator []( int nIndex ) const;
其它數(shù)組有:
CByteArray 支持字節(jié)數(shù)組.
CWordArray 支持字?jǐn)?shù)組.
CDWordArray 支持雙字節(jié)數(shù)組.
CObArray 支持COject類(lèi)型指針數(shù)組.
CPtrArray 支持Void類(lèi)型指針數(shù)組.
CUIntArray 支持無(wú)符號(hào)整形數(shù)組.
CStringArray 支持CString數(shù)組.
用法與上面基本一致.
二, 表使用心得
我以CStringList為例,談一下使用表的心得.注意:查看MSDN,實(shí)際上看的是CObList,注意相應(yīng)的類(lèi)型改成CString類(lèi),當(dāng)然還有一些小差別,具體看vc的提示,最好安裝vc_assist6.下面這個(gè)例子幾乎用到這個(gè)類(lèi)所有的函數(shù).
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
下面是該類(lèi)函數(shù)的簡(jiǎn)介.
POSITION InsertBefore( POSITION position, CObject* newElement );
POSITION InsertAfter( POSITION position, CObject* newElement );
在一個(gè)位置前或后插入一個(gè)新元素.
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會(huì)變.
CObject*& GetAt( POSITION position );
CObject* GetAt( POSITION position ) const;
根據(jù)位置得到元素.
void SetAt( POSITION pos, CObject* newElement );
根據(jù)位置設(shè)置元素.
void RemoveAt( POSITION position );
根據(jù)位置刪除元素.
CObject* RemoveHead( );刪除并返回頭元素
CObject* RemoveTail( ); 刪除并返回尾元素
POSITION AddHead( CObject* newElement );增加頭元素
void AddHead( CObList* pNewList );在前面加一個(gè)表
POSITION AddTail( CObject* newElement );增加尾元素
void AddTail( CObList* pNewList );在后面加一個(gè)表
POSITION Find( CObject* searchValue, POSITION startAfter = NULL ) const根據(jù)元素值找位置.
POSITION FindIndex( int nIndex ) const根據(jù)索引找位置.