MFC集合類之CList

2021-06-26 02:50:08 字數 3665 閱讀 6592

之前我們先以cstringlist為例演示下列成員方法:

addtail, addhead, getheadposition, gettailposition, getprev(), getnext()

我們看到如何向乙個clist類中增加資料:可以從兩端增加,以及如何遍歷整個clist……

[cpp]view plain

copy

#include 

#include 

#include 

using

std::cout;  

using

std::endl;  

intmain() ;  

cstringlist list;  

for(

inti = 0; i < 

sizeof

(str) / 

sizeof

(str[0]); i++)  

list.addtail(str[i]);  

position pos = list.getheadposition();  

while

(pos != null)   

trace("之後呢:/n"

);  

for(

inti = 0; i < 

sizeof

(str) / 

sizeof

(str[0]) - 1; i++)  

list.addhead(str[i]);  

pos = list.getheadposition();  

while

(pos != null)   

trace("再之後呢:/n"

);  

pos = list.gettailposition();  

while

(pos != null)   

}  

getat與setat方法:

[cpp]view plain

copy

#include 

#include 

#include 

using

std::cout;  

using

std::endl;  

intmain() ;  

cstringlist list;  

for(

inti = 0; i < 

sizeof

(str) / 

sizeof

(str[0]); i++)  

list.addtail(str[i]);  

position pos = list.gettailposition();  

cstring string = list.getat(pos);  

trace(_t("%s/n"

), string);  

trace(_t("after setat: /n"

));  

list.setat(pos, _t("hehehehe"

));  

string = list.getat(pos);  

trace(_t("%s/n"

), string);  

}  

removeat, insertbefore, insertafter方法:

[cpp]view plain

copy

#include 

#include 

#include 

using

std::cout;  

using

std::endl;  

intmain() ;  

cstringlist list;  

for(

inti = 0; i < 

sizeof

(str) / 

sizeof

(str[0]); i++)  

list.addtail(str[i]);  

position pos = list.gettailposition();  

list.removeat(pos);  

pos = list.gettailposition();  

while

(pos != null)   

pos = list.gettailposition();  

list.insertbefore(pos, _t("huhu!!!"

));  

list.insertafter(pos, _t("i am the last!"

));  

pos = list.getheadposition();  

trace(_t("經過insertbefore和insertafter: /n"

));  

while

(pos != null)   

}  

以及採用模板特性的clist:

標頭檔案:

[cpp]view plain

copy

#pragma once

class

cpoint3d   

cpoint3d(int

xx, 

intyy, 

intzz) : x(xx), y(yy), z(zz) {}  

intoperator==(

const

cpoint3d& pt) 

const

};  

實現:[cpp]view plain

copy

#include 

#include 

#include 

#include "clistdemo.h"

using

std::cout;  

using

std::endl;  

intmain()   

trace("自定義類使用:/n"

);  

clistlist1;  

for(

inti = 0; i < 10; i++)  

list1.addhead(cpoint3d(i, i * i, i * i * i));  

pos = list1.getheadposition();  

while

(pos != null)   

pos = list1.find(cpoint3d(6, 36, 216));  

cpoint3d point3dfind = list1.getat(pos);  

trace("查詢展示,嘿嘿:"

);  

trace(_t("x = %d/ty = %d/tz = %d/n"

), point3dfind.x, point3dfind.y, point3dfind.z);  

}  

在這裡我使用了find成員方法來對模板clist進行查詢,所以我們必須在自定義的類中過載「==」運算子,看到了標頭檔案

當中的operator==方法吧……

from: 

msdn:

集合類 CList的使用

集合類 clist的使用 今天,在專案中,需要使用集合類,考慮到使用簡單 方便,所以選擇了clist。可沒想到在使用的過程中卻出現了學多問題。1.無法實現集合類的複製,需要過載類的 運算子 錯誤提示為無法從funlistnode 轉換到funlistnode 2.沒有可用的複製構著函式 3.沒有預設...

MFC之集合類(一)

長久以來,在用到集合類 collection 時,一般都是開啟示例collect,從中copy出其中的定義,依葫蘆畫瓢地用,從來沒有徹底的了解其原理。今天終於把相關的msdn文件細讀了一遍。從功能上分,集合類又分為array,list和map。array和list其實都屬於同一類,都是一種順序儲存方...

C List集合類常用操作 一

所有操作基於以下類 class employees public string name public string city public datetime birthdate list 初始化 list類的新例項,該例項為空並且具有預設初始容量。listemployees new list em...