MFC提供的集合类CStringArray类和CPtrArray类
1.CStringArray類
CStringArray類可以用來存儲CString類型的對象,而且它的容量是可以動態(tài)增加的。
CStringArray
?
| CObject |
| └CStringArray |
CStringArray類支持CString對象數(shù)組。
CStringArray的成員函數(shù)類似于CObArray類的成員函數(shù)。由于具有這些相似性,你可以參考關(guān)于CObArray的參考文件來獲取CStringArray成員函數(shù)的詳細說明。如果在說明中看到某一函數(shù)的返回值是一個指向CObject對象的指針,則可以用一個CString(而不是一個CString指針)來代替它。如果看到某一函數(shù)的參數(shù)是一個指向CObject的指針,則可以用LPCTSTR來代替它。
例如,可以將
CObject* CObArray::GetAt( int <nIndex> ) const;
轉(zhuǎn)換為
CString CStringArray::GetAt( int <nIndex> ) const;
和將
void SetAt( int <nIndex>, CObject* <newElement> )
轉(zhuǎn)換為
void SetAt( int <nIndex>, LPCTSTR <newElement> );
CStringArray與IMPLEMENT_SERIAL宏聯(lián)合起來支持其元素的連續(xù)和轉(zhuǎn)儲。如果一個CString對象數(shù)組被用一個重載的插入操作符或Serialize成員函數(shù)保存到一個存檔中,則它的每一個元素都按順序連續(xù)。
注意:
在使用一個數(shù)組之前,使用SetSize來建立它的大小并給它分配內(nèi)存。如果你不使用SetSize,則向數(shù)組中添加元素將導(dǎo)致數(shù)組被頻繁地拷貝和分配內(nèi)存。頻繁分配內(nèi)存和拷貝會導(dǎo)致效率低和內(nèi)存零碎。
如果你需要數(shù)組中個別字符串元素的轉(zhuǎn)儲,則應(yīng)該將轉(zhuǎn)儲環(huán)境的深度設(shè)置為1或更大。當一個CString數(shù)組被刪除時,或當其中的個別元素被刪除時,字符串內(nèi)存被根據(jù)需要釋放。
有關(guān)使用CStringArray的更多信息,參見“Visual C++程序員指南”中的文章“集合”。
#include <afxcoll.h>
CStringArray類成員
構(gòu)造
| CStringArray | 構(gòu)造一個空的CString對象數(shù)組 |
綁定
| GetSize | 獲取這個數(shù)組中的元素數(shù)目 |
| SetSize | 設(shè)置這個數(shù)組中包含的元素數(shù)目 |
| GetUpperBound | 返回最大的有效索引 |
操作符
| FreeExtra | 釋放當前數(shù)組邊界之外的未使用的所有內(nèi)存 |
| RemoveAll | 從數(shù)組中刪除所有元素 |
元素訪問
| GetAt | 返回位于給定索引處的值 |
| SetAt | 設(shè)置給定索引處的元素的值;不得將數(shù)組增大 |
| ElementAt | 返回對數(shù)組中的某一元素指針的臨時引用 |
| GetData | 對數(shù)組中的元素允許的訪問。可以是NULL |
擴大數(shù)組
| SetAtGrow | 設(shè)置給定索引處的值,如果必要的話可以增長數(shù)組 |
| Add | 在數(shù)組的末尾添加一個元素;可根據(jù)需要增長數(shù)組 |
| Append | 向數(shù)組中添加另一個數(shù)組;如果必要的話可增長數(shù)組 |
| Copy | 將另一個數(shù)組拷貝到此數(shù)組中;如果必要的話可增長數(shù)組 |
插入/刪除
| InsertAt | 在指定索引處插入一個元素(或者是另一個數(shù)組中的所有元素) |
| RemoveAt | 刪除指定索引處的一個元素 |
操作符
| operator [] | 設(shè)置或獲取在指定索引處的元素 |
?
?
2.CPtrArray類
CPtrArray類支持void類型的指針數(shù)組,該類的成員函數(shù)與CObArray類相應(yīng)的函數(shù)類似,只是CObArray類的成員函數(shù)中使用CObject指針作為參數(shù)或返回值類型的地方,在CPtrArray類中都用void類型的指針代替
CPtrArray
?
| CObject |
| └CPtrArray |
?
CPtrArray類支持void指針數(shù)組。
CPtrArray的成員函數(shù)類似于CObArray類的成員函數(shù)。由于這種相似,你可以利用CObArray參考文檔作為成員函數(shù)的說明。無論在何處使用一個CObject指針作為函數(shù)參數(shù)或返回值,都可以將它替換成void。例如:
CObject* CObArray::GetAt( int <nIndex> ) const;
可以轉(zhuǎn)換成:
void* CPtrArray::GetAt( int <nIndex> ) const;
CPtrArray嵌入IMPLEMENT_DYNAMIC宏來支持運行時類型訪問和轉(zhuǎn)儲到一個CDumpContext對象。如果你需要轉(zhuǎn)儲個別的指針數(shù)組元素,你必須將轉(zhuǎn)儲環(huán)境的深度設(shè)置為1或更大。
注意:
在使用一個數(shù)組之前,先用SetSize函數(shù)建立數(shù)組的大小,并為數(shù)組分配內(nèi)存。如果應(yīng)用程序沒有使用SetSize函數(shù),則向數(shù)組中增加元素會使它被頻繁地再分配和拷貝。頻繁再分配和拷貝的效率很低,并且可能使內(nèi)存變得很零碎。
指針數(shù)組不能被串行化。
當一個指針數(shù)組被刪除時,或當其元素被刪掉時,只刪掉指針,而這些指針所引用的實體不被刪除。
#include <afxcoll.h>
請參閱:CObArray
CPtrArray類成員
構(gòu)造
| CPtrArray | 構(gòu)造一個空的void指針數(shù)組 |
綁定
| GetSize | 獲取這個數(shù)組中的元素個數(shù) |
| GetUpperBound | 返回最大的有效索引 |
| SetSize | 設(shè)置此數(shù)組中要包含的元素個數(shù) |
操作
| FreeExtra | 釋放超出當前上界的所有未用內(nèi)存 |
| RemoveAll | 刪除此數(shù)組中的所有元素 |
元素訪問
| GetAt | 返回給定索引處的值 |
| SetAt | 設(shè)置給定索引處的值;數(shù)組不運行擴展 |
| ElementAt | 返回對數(shù)組內(nèi)的一個元素指針的一個臨時引用 |
| GetData | 允許訪問數(shù)組中的元素。不能是NULL |
擴大數(shù)組
| SetAtGrow | 設(shè)置給定索引處的值,如果必要,允許數(shù)組擴展 |
| Add | 將一個元素增加到數(shù)組尾;在必要時擴展數(shù)組 |
| Append | 將另一個數(shù)組添加到此數(shù)組;如果必要,則擴展此數(shù)組 |
| Copy | 將另一個數(shù)組拷貝給此數(shù)組;如果必要,則擴展此數(shù)組 |
插入/刪除
| InsertAt | 將一個元素(或另一數(shù)組中的所有元素)插入到指定索引處 |
| RemoveAt | 刪除指定索引處的元素 |
操作符
| operator [] | 設(shè)置或獲取給定索引處的元素 |
總結(jié)
以上是生活随笔為你收集整理的MFC提供的集合类CStringArray类和CPtrArray类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC里的集合类、链表类、映射类
- 下一篇: MFC中的集合类