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