常用容器總結

2021-10-19 09:37:42 字數 3723 閱讀 5145

2. 關聯容器

加深印象用,使用primer中的綜合例子(習題)做回顧,不會列出所有知識點細節,只列出常用的。

迭代器是一種抽象的設計概念,在設計模式中iterator模式被定義為:提供一種方法,可以按序訪問某一聚合物(容器)所含元素,且不暴露該聚合物的內部表達方式。

可以簡化的理解為乙個指標(但不是),可訪問容器中不同位置的元素,需要注意的是迭代器範圍為[begin,end),end為尾元素的後乙個位置。

習題9.4:判斷容器中是否有要查詢的值

bool

find_int

(vector<

int>

::const_iterator begin, vector<

int>

::const_iterator end,

int n)

return

false;}

intmain()

; cout << boolalpha <<

find_int

(vi.

begin()

, vi.

end(),

2)<< endl;

return0;

}

對於非鍊錶型別(list)的容器,由於其元素空間連續,因此增加刪除元素會改變原有迭代器的指向,導致原有迭代器失效,需要重新定位。

習題9.33:在每個元素後新增新元素

int

main()

;auto iter = v1.

begin()

;while

(iter != v1.

end())

for(

const

auto i : v1)

cout << i <<

" ";

cout << endl;

return0;

}

queue:先進先出;

stack:先進後出;

佇列:

int

main()

;bool bseen =

false

; queue<

char

> stk;

for(

const

auto

& s : expression)

else

if(s ==

')') bseen =

false;if

(bseen) stk.

push

(s);

} string repstr;

while

(!stk.

empty()

) expression.

replace

(expression.

find

("(")+

1, repstr.

size()

, repstr)

; cout << expression << endl;

return0;

}

輸出結果:

this is (abcd)

.

stack:

int

main()

;bool bseen =

false

; stack<

char

> stk;

for(

const

auto

& s : expression)

else

if(s ==

')') bseen =

false;if

(bseen) stk.

push

(s);

} string repstr;

while

(!stk.

empty()

) expression.

replace

(expression.

find

("(")+

1, repstr.

size()

, repstr)

; cout << expression << endl;

return0;

}

輸出結果:

this is (dcba)

.

map迭代器為pair,可改變value,但不能改變key(const);

set迭代器為 const key,不可改變;

習題11.31

int

main()

,,};

if(m1.

find

("aa"

)!= m1.

end())

else

for(

const

auto

& p : m1)

std::cout << p.first <<

" "<< p.second << std::endl;

return0;

}

輸出結果:

bb bcd

cc cde

習題11.33:單詞轉換程式,規則:在被轉換的文字中發現縮寫時,則根據規則將縮寫轉換成短語;共輸入兩個檔案,乙個檔案儲存規則,另乙個檔案儲存需要被轉換的文字。

規則:

brb	be right back

k okay:

y why

r are

u you

pic picture

thk thanks!

18r later

希望轉換的文字:

where r u

y dont u send me a pic

k thk 18r

希望得到的結果:

where are you

why dont you send me a picture

okay? thanks! later

需求分析:

1、將規則檔案中的縮寫與短語讀入,形成map,縮寫為key,短語為value;

2、讀入需要轉換得到文字,如果在map中到當前字串key,則替換為value,否則返回原字串。

//實現需求1:

mapbuildmap

(ifstream& map_file)

return trans_map;

}//實現需求2:

const string&

transform

(const string&s,

const map

&m)void

word_transform

(ifstream&map_file,ifstream&input)

cout << endl;}}

intmain()

暫時用的不多,對自定義的類使用無序容器需要過載雜湊函式:

hash《內建型別》()

(自定義類中的乙個物件)

;

STL常用容器總結

include 標頭檔案 queue q 定義 q.push x 入隊 q.pop 出隊 q.empty 判空 q.size 佇列元素個數 q.front 隊首元素值 q.back 隊尾元素值 include 標頭檔案 stack s 定義 s.push x 入棧 s.pop 出棧 s.empty ...

c 常用容器vector總結

vector類稱作向量類,它實現了動態陣列,用於元素數量變化的物件陣列。像陣列一樣,vector類也用從0開始的下標表示元素的位置 但和陣列不同的是,當vector物件建立後,陣列的元素個數會隨著vector物件元素個數的增大和縮小而自動變化。1.建構函式 vector 建立乙個空vector ve...

容器類 collection 常用方法總結

nsarray 常用方法 1.建立陣列物件 arraywithobjects 2.獲取某個下標 index 物件方法 objectatindex nsstring str1 arr1 objectatindex 0 3.已知物件,獲取位置下標 indexofobject nslog lu arr1 ...