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