mfc提供集合類(collect)專門負責資料物件的儲存和管理,mfc的集合類分為三類,分別用於處理三類不同性質的資料結構:表(list,類似於資料結構的雙鏈表),陣列(array)和對映(map,具有類似字典的功能).
一,陣列使用心得
原型: template< class type, class arg_type > class carray : public cobject
簡單地說是你輸入的時候用arg_type類,輸出的時候用type,自動實現轉換.
具體實現可以看c:/program files/microsoft visual studio/vc98/mfc/include/afxtempl.h.
如:#include "afxtempl.h"//那個類需要那些標頭檔案可以檢視msdn,在類總括的最後
carray vars;
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加一.
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 支援位元組陣列.
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))
else
}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根據索引找位置.
「完數」和「盈數」
乙個數如果恰好等於它的各因子 該數本身除外 子和,如 6 3 2 1,則稱其為 完數 若因子之和大於該數,則稱其為 盈數 求出2 到60 之間所有 完數 和 盈數 並以如下形式輸出 e e1 e2 e3 ei 為完數 g g1 g2 g3 gi 為盈數 include include include...
統計學科數和課程數
現有課程選修表,要求統計出每個學生所選的課程數及學科數,選修課資料如下 sno score name category 1 23 語文 文科 1 34 政治 文科 1 3 物理 理科 1 4 數學 理科 1 33 化學 理科 2 3 體育 實踐課 sql如下 select from select s...
flume 監控傳送數和成功數
使用flume實時收集日誌的過程中,儘管有事務機制保證資料不丟失,但仍然需要時刻關注source channel sink之間的訊息傳輸是否正常,比如,souce channel傳輸了多少訊息,channel sink又傳輸了多少,兩處的訊息量是否偏差過大等等。flume為我們提供了monitor的...