CStringList 和各給陣列的用法

2022-08-29 18:48:10 字數 3960 閱讀 3660

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的...