mfc陣列類carray的使用的操作詳解***
mfc的陣列類支援的陣列類似於常規陣列,可以存放任何資料型別。常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,即先確定大小,而
mfc陣列類建立的物件可以根據需要動態地增大或減小,陣列的起始下標是
0,而上限可以是固定的,也可以隨著元素的增加而增加,陣列在記憶體中的位址仍然是連續分配的。
mfc定義了陣列模板類
carray
,並針對各種常用變數型別定義了
cbytearray
,carray
,cuintarray
,cdarray
,cstringarray
,cobarray
,cptrarray
。詳見下表:
edu-cn.com
陣列類變數型別
變數數值範圍
標頭檔案carray
通過模板類的引數型別設定各種型別
afxtempl.h
cbytearray 8
位無符號整數
byte型別
0—255
afxcoll.h
carray 16
位無符號整數
word型別
0—65535
afxcoll.h
cdarray 32
位無符號整數
dword型別
0—4294967295
afxcoll.h
cuintarray 32
位無符號整數
uint型別
0—4294967295
afxcoll.h
cstringarray
cstring
字串string
字串
afxcoll.h
cobarray
cobject
類及其派生類
afxcoll.h
cptrarray
void*
型別指標
afxcoll.h
中國教程網
mfc陣列類使用方法基本相同,下面分別以
carray
和cuintarray
為例演示說明陣列類的使用方法。
使用 carray www.
開啟++ 6.0
,建立基於對話方塊的工程
array
。carraydlg
類宣告檔案(
arraydlg.h
)中新增語句:
中國教程網
#include
請記住:使用
carray
一定要包含標頭檔案
afxtempl.h
。開啟主對話方塊資源
idd_array_dialog
,新增乙個按鈕
idc_array_cpoint
,標題為
carray_cpoint
,雙擊該按鈕,在
onarraycpoint()
函式中新增如下**:
void carraydlg::onarraycpoint()
}
**簡要說明:
carray m_array;
中國教程網
該語句定義乙個
carray
陣列物件,模板類
carray
有兩個引數,第乙個引數為陣列元素的型別,該例中是
cpoint
,即m_array
是cpoint
陣列;第二個引數為引用型別,一般有兩種選擇,一種選擇與第乙個引數型別相同,它意味著陣列物件作為引數傳遞時,傳遞的是陣列物件。第二種選擇是第乙個引數型別的引用,它意味著陣列物件作為引數傳遞時,傳遞的是陣列物件的指標。因此,尤其對於較複雜的陣列結構型別,推薦使用引用傳遞,節約記憶體同時加快程式執行速度,正如本例使用的是
cpoint&。
m_array.setsize(10,10);
中國教程網
setsize
函式設定陣列的大小,該函式有兩個引數,第乙個引數設定陣列的大小;第二個引數設定陣列增長時記憶體分配的大小,預設值是-
1,使用預設值可以保證記憶體分配得更加合理。本例中第二個引數是
10,意即增加乙個陣列元素會分配
10個元素大小的記憶體供陣列使用。
您可以隨時使用
setsize
函式設定陣列的大小,如果第乙個引數值小於陣列已有成員數量,多於第乙個引數值的成員將被截去並釋放相應記憶體。
在使用carray
陣列前,最好先使用
setsize
確定其大小並申請儲存空間。如果不這樣做,向陣列中增加元素時,需要不斷地移動和拷貝元素造成執行的低效率和記憶體碎塊。
m_array.add(pt1);
中國教程網
add函式新增陣列元素。
int size=m_array.getsize();
getsize
返回陣列元素的數目。
for(int i=0;i
為了直觀顯示,該段**將各陣列元素作成折線畫到螢幕上,其中
getat(int index)
通過index
值得到相應的元素值。編譯並執行程式,觀察執行結果。
繼續演示如何使用carray
再次開啟主對話方塊資源
idd_array_dialog
,新增乙個按鈕
idc_array_cstring
,標題為
carray_cstring
,雙擊該按鈕,在
onarraycstring ()
函式中新增如下**:
void carraydlg::onarraycstring()
afxmessagebox("continue...");
m_string.removeat(2);
count=m_string.getsize();
for(x=0;x
afxmessagebox("a string has delete,continue...");
m_string.removeall();
count=m_string.getsize();
if(count==0)
afxmessagebox("all elements are deleted.");}
**簡要說明:
m_string.setatgrow(2,szdog);
edu-cn.com
setatgrow
有兩個引數,第乙個引數決定陣列元素的序號值,第二個引數是元素的值。該函式根據序號值設定相應陣列元素的值,功能與
setat
相近,不同之處是使用該函式設定元素值時,如果序號值大於陣列的上界,陣列會自動增長。
編譯執行程式,細心的讀者您可能會看到,第一行字元是
「tiger」
,第二行字元是
「bear」
,這是我們預料之中的,但第三行是空串,第四行是
「dog」
。空串是怎樣造成的呢?細分析下面三行**就可以知道:
m_string.setatgrow(0,sztiger);m_string.setatgrow(2,szdog);m_string.insertat(1,szbear);
第一行設定元素0為
「tiger」
,這是沒有疑義的。
第二行設定元素2為
「dog」
,但是在設定元素
2的同時自動將元素
1填充為空串。
第三行插入
「bear」
為元素1
,同時原來的元素
1和元素
2後移為元素
2和元素3。
怎麼樣,這回明白了吧。
m_string.insertat(1,szbear);
insertat
函式在指定序號處插入相應元素,該函式在執行過程中,插入點後面的元素會自動後移。
dc.textout(10,displaypos,m_string[x]);
其中,m_string[x]
是陣列類對操作符
的過載,陣列類
carray
允許使用
操作符,類似於的常規陣列。
m_string[x]
也可以用
m_string.getat(x)
替代。
m_string.removeat(2);
edu-cn.com
removeat
只有乙個引數,即元素序號值。該函式根據元素序號值刪除相應元素值,後面的元素會自動前移。
m_string.removeall();
removeall
刪除所有元素值
最後再說明一點:
removeat
,insertat
函式操作時會使得陣列元素移位,執行時間大於
setat
,removeall
,add
函式。
MFC陣列類CArray的使用的操作詳解
mfc的陣列類支援的陣列類似於常規陣列,可以存放任何資料型別。常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,即先確定大小,而mfc陣列類建立的物件可以根據需要動態地增大或減小,陣列的起始下標是0,而上限可以是固定的,也可以隨著元素的增加而增加,陣列在記憶體中的位址仍然是連續分配的。mfc...
C Array類 建立陣列
除了使用c 語法 建立陣列之外,還可以使用靜態方法 createinstance 建立陣列。舉個例子 array intarray1 array.createinstance typeof int 5 for int i 0 i 5 i for int i 0 i 5 i 在這個例子中,演示了如何建...
C Array類 建立陣列
c 中建立陣列,常見的例如 int array new int 5 除了使用c 語法 建立陣列之外,還可以使用靜態方法createinstance 建立陣列。array test array.createinstance typeof int 5 for int i 0 i test length ...