vc入門寶典(九) (轉)
集合類使用心得
/develop/author/netauthor/he_zhidan/">何志丹
MFC提供集合類(Collect)專門負責資料的和管理,MFC的集合類分為三類,分別用於處理三類不同性質的資料結構:表(List,類似於資料結構的雙連結串列),陣列(Array)和對映(Map,具有類似字典的功能).:namespace prefix = o ns = "urn:schemas--com::office" />
一,陣列使用心得
原型: template< class TYPE, class ARG_TYPE > class CArray : public C
簡單地說是你輸入的時候用ARG_TYPE類,輸出的時候用TYPE,自動實現轉換.
具體實現可以看c:program filesmicrosoft vc98mfcincludeafxtempl.h.
如:
#include "afxtempl.h"//那個類需要那些頭可以檢視msdn,在類總括的最後
CArray
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 支援位元組陣列.
CArray 支援字陣列.
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根據找位置.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-958598/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- vc入門寶典(十) (轉)
- VC入門寶典三(String) (轉)
- vc入門寶典八(基本操作) (轉)
- vc入門寶典(一)(選單) (轉)
- vc入門寶典七(工具欄) (轉)
- vc入門寶典六(多執行緒) (轉)執行緒
- [轉]BI入門經典
- BI入門經典 (轉)
- Tungsten Fabric入門寶典丨編排器整合
- 【官方重磅釋出】Google AdMob新手入門寶典Go
- Tungsten Fabric入門寶典丨TF元件的七種“武器”元件
- VC常見入門問題總結(二) (轉)
- VC常見入門問題總結(一) (轉)
- Tungsten Fabric入門寶典丨多編排器用法及配置
- Tungsten Fabric入門寶典丨首次啟動和執行指南
- Tungsten Fabric入門寶典丨關於安裝的那些事(下)
- Tungsten Fabric入門寶典丨關於叢集更新的那些事
- Tungsten Fabric入門寶典丨8個典型故障及排查Tips
- Tungsten Fabric入門寶典丨關於服務鏈、BGPaaS及其它
- Kotlin 語言入門寶典 | Android 開發者 FAQ Vol.5KotlinAndroid
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- Webpack經典入門Web
- Tungsten Fabric入門寶典丨開始第二天的工作
- 大資料架構師從入門到精通 學習必看寶典大資料架構
- 資料治理之後設資料管理的利器——Atlas入門寶典
- VC中文FAQ寶庫之5:怎樣載入其他的應用程式 (轉)
- windows網路程式設計經典入門 (轉)Windows程式設計
- Python入門(九):集合Python
- 面試寶典面試
- 遊戲製作詳解自----OpenGL入門教程(九)(轉)遊戲
- Linux下Oracle安裝寶典 (轉)LinuxOracle
- Linux下Oracle安裝寶典(轉)LinuxOracle
- Tungsten Fabric入門寶典丨說說L3VPN及EVPN整合
- Tungsten Fabric入門寶典丨關於多叢集和多資料中心
- 一站式後設資料治理平臺——Datahub入門寶典
- VC++ MFC入門簡明教程,我當時就是看了它一天入門的 (轉)C++
- JFreeChart介紹及經典入門資料(轉)
- JAVA的入門基礎一些精典(轉)Java