STL瀹炶返鎸囧崡Practical Guide to STL锛堜笅锛
鍙戝竷: 2008-6-26 13:30 | 浣滆: admin | 鏌ョ湅: 7娆
锛堟帴涓瘒锛
娓告爣锛圛terator锛
鎴戣杩囨父鏍囨槸鎸囬拡锛屼絾涓嶄粎浠呮槸鎸囬拡銆傛父鏍囧拰鎸囬拡寰堝儚锛屽姛鑳藉緢鍍忔寚閽堬紝浣嗘槸瀹為檯涓婏紝娓告爣鏄氳繃閲嶈浇涓鍏冪殑鈥*鈥濆拰鈥->鈥濇潵浠庡鍣ㄤ腑闂存帴鍦拌繑鍥炰竴涓笺傚皢杩欎簺鍊煎瓨鍌ㄥ湪瀹瑰櫒涓苟涓嶆槸涓涓ソ涓绘剰锛屽洜涓烘瘡褰撲竴涓柊鍊兼坊鍔犲埌瀹瑰櫒涓垨鑰呮湁涓涓间粠瀹瑰櫒涓垹闄わ紝杩欎簺鍊煎氨浼氬け鏁堛傚湪鏌愮绋嬪害涓婏紝娓告爣鍙互鐪嬩綔鏄彞鏌勶紙handle锛夈傞氬父鎯呭喌涓嬫父鏍囷紙iterator锛夌殑绫诲瀷鍙互鏈夋墍鍙樺寲锛岃繖鏍峰鍣ㄤ篃浼氭湁鍑犵涓嶅悓鏂瑰紡鐨勮浆鍙橈細
iterator鈥曗曞浜庨櫎浜唙ector浠ュ鐨勫叾浠栦换浣曞鍣紝浣犲彲浠ラ氳繃杩欑娓告爣鍦ㄤ竴娆℃搷浣滀腑鍦ㄥ鍣ㄤ腑鏈濆悜鍓嶇殑鏂瑰悜璧颁竴姝ャ傝繖鎰忓懗鐫瀵逛簬杩欑娓告爣浣犲彧鑳戒娇鐢ㄢ++鈥濇搷浣滅銆傝屼笉鑳戒娇鐢ㄢ--鈥濇垨鈥+=鈥濇搷浣滅銆傝屽浜巚ector杩欎竴绉嶅鍣紝浣犲彲浠ヤ娇鐢ㄢ+=鈥濄佲溾曗濄佲++鈥濄佲-=鈥濅腑鐨勪换浣曚竴绉嶆搷浣滅鍜屸<鈥濄佲<=鈥濄佲>鈥濄佲>=鈥濄佲==鈥濄佲!=鈥濈瓑姣旇緝杩愮畻绗︺
reverse_iterator 鈥曗曞鏋滀綘鎯崇敤鍚戝悗鐨勬柟鍚戣屼笉鏄悜鍓嶇殑鏂瑰悜鐨勬父鏍囨潵閬嶅巻闄ector涔嬪鐨勫鍣ㄤ腑鐨勫厓绱狅紝浣犲彲浠ヤ娇鐢╮everse_iterator 鏉ュ弽杞亶鍘嗙殑鏂瑰悜锛屼綘杩樺彲浠ョ敤rbegin()鏉ヤ唬鏇縝egin()锛岀敤rend()浠f浛end()锛岃屾鏃剁殑鈥++鈥濇搷浣滅浼氭湞鍚戝悗鐨勬柟鍚戦亶鍘嗐
const_iterator 鈥曗曚竴涓悜鍓嶆柟鍚戠殑娓告爣锛屽畠杩斿洖涓涓父鏁板笺備綘鍙互浣跨敤杩欑绫诲瀷鐨勬父鏍囨潵鎸囧悜涓涓彧璇荤殑鍊笺
const_reverse_iterator 鈥曗曚竴涓湞鍙嶆柟鍚戦亶鍘嗙殑娓告爣锛屽畠杩斿洖涓涓父鏁板笺
Set鍜孧ap涓殑鎺掑簭
闄や簡绫诲瀷鍜屽煎锛屾ā鏉垮惈鏈夊叾浠栫殑鍙傛暟銆備綘鍙互浼犻掍竴涓洖璋冨嚱鏁帮紙閫氬父鎵璇寸殑澹版槑鈥減redicate鈥濃曗曡繖鏄甫鏈変竴涓弬鏁扮殑鍑芥暟杩斿洖涓涓竷灏斿硷級銆備緥濡傦紝濡傛灉浣犳兂鑷姩寤虹珛涓涓泦鍚堬紝闆嗗悎涓殑鍏冪礌鎸夊崌搴忔帓鍒楋紝浣犲彲浠ョ敤绠鏄庣殑鏂规硶寤虹珛涓涓猻et绫伙細
set
greater 鏄彟涓涓ā鏉垮嚱鏁帮紙鑼冨瀷鍑芥暟锛夛紝褰撳兼斁缃湪瀹瑰櫒涓悗锛屽畠鐢ㄦ潵涓鸿繖浜涘兼帓搴忋傚鏋滀綘鎯虫寜闄嶅簭鎺掑垪杩欎簺鍊硷紝浣犲彲浠ヨ繖鏍峰啓锛
set
鍦ㄥ疄鐜扮畻娉曟椂锛屽皢澹版槑锛坧redicate锛変綔涓轰竴涓弬鏁颁紶閫掑埌涓涓猄TL妯℃澘绫讳腑鏃朵細閬囧埌寰堝鐨勫叾浠栨儏鍐碉紝涓嬮潰灏嗕細瀵硅繖浜涙儏鍐佃繘琛岃缁嗘弿杩般
STL 鐨勭儲鎭间箣浜屸曗曢敊璇俊鎭
杩欎簺妯℃澘鐨勫懡鍚嶉渶瑕佸缂栬瘧鍣ㄨ繘琛屾墿鍏咃紝鎵浠ュ綋缂栬瘧鍣ㄥ洜鏌愮鍘熷洜鍙戠敓鏁呴殰鏃讹紝瀹冧細鍒楀嚭涓娈靛緢闀跨殑閿欒淇℃伅锛屽苟涓旇繖浜涢敊璇俊鎭櫐娑╅毦鎳傘傛垜瑙夊緱澶勭悊杩欐牱鐨勯毦棰樻病鏈変粈涔堝ソ鍔炴硶銆備絾鏈濂界殑鏂规硶鏄幓鏌ユ壘骞朵粩缁嗙爺绌堕敊璇俊鎭寚鏄庝唬鐮佹鐨勫熬绔傝繕鏈変竴涓儲鎭煎氨鏄細褰撲綘鍙屽嚮閿欒淇℃伅鏃讹紝瀹冧細灏嗛敊璇寚鍚戞ā鐗堝簱鐨勫唴閮ㄤ唬鐮侊紝鑰岃繖浜涗唬鐮佸氨鏇撮毦璇讳簡銆備竴鑸儏鍐典笅锛岀籂閿欑殑鏈濂芥柟娉曟槸閲嶆柊妫鏌ヤ竴涓嬩綘鐨勪唬鐮侊紝杩愯鏃跺拷鐣ユ墍鏈夌殑璀﹀憡淇℃伅銆
绠楁硶锛圓lgorithms锛
绠楁硶鏄ā鏉夸腑浣跨敤鐨勫嚱鏁般傝繖鎵嶇湡姝e紑濮嬩綋鐜癝TL鐨勫己澶т箣澶勩備綘鍙互瀛︿範涓浜涘ぇ澶氭暟妯℃澘瀹瑰櫒涓兘浼氱敤鍒扮殑涓浜涚畻娉曞嚱鏁帮紝杩欐牱浣犲彲浠ラ氳繃鏈绠渚跨殑鏂瑰紡杩涜鎺掑簭銆佹煡鎵俱佷氦鎹㈢瓑鎿嶄綔銆係TL涓寘鍚潃涓绯诲垪瀹炵幇绠楁硶鐨勫嚱鏁般傛瘮濡傦細sort(vec.begin()+1, vec.end()-1)鍙互瀹炵幇瀵归櫎绗竴涓拰鏈鍚庝竴涓厓绱犵殑鍏朵粬鍏冪礌鐨勬帓搴忔搷浣溿
瀹瑰櫒鑷韩涓嶈兘浣跨敤绠楁硶锛屼絾涓や釜瀹瑰櫒涓殑娓告爣鍙互闄愬畾瀹瑰櫒涓娇鐢ㄧ畻娉曠殑鍏冪礌銆傛棦鐒惰繖鏍凤紝绠楁硶涓嶇洿鎺ュ彈鍒板鍣ㄧ殑闄愬埗锛岃屾槸閫氳繃閲囩敤娓告爣锛岀畻娉曟墠鑳藉寰楀埌鏀寔銆傛澶栵紝寰堝娆′綘浼氶亣鍒颁紶閫掍竴涓凡缁忓噯澶囧ソ浜嗙殑鍑芥暟锛堜互鍓嶆彁鍒扮殑澹版槑锛歱redicate锛変綔涓哄弬鏁帮紝浣犱篃鍙互浼犻掍互鍓嶇殑鏃у笺
涓嬮潰鐨勪緥瀛愭紨绀轰簡鎬庢牱浣跨敤绠楁硶锛
//绋嬪簭锛氭祴璇曞垎鏁扮粺璁
//鐩殑锛氶氳繃瀵瑰悜閲忎腑淇濆瓨鐨勫垎鏁扮殑鎿嶄綔璇存槑鎬庢牱浣跨敤绠楁硶
#include
#include
#include
#include
using namespace std;
int testscore[] = {67, 56, 24, 78, 99, 87, 56};
//鍒ゆ柇涓涓垚缁╂槸鍚﹂氳繃浜嗚冭瘯
bool passed_test(int n)
{
return (n >= 60);
}
// 鍒ゆ柇涓涓垚缁╂槸鍚︿笉鍙婃牸
bool failed_test(int n)
{
return (n < 60);
}
int main(int argc, char* argv[])
{
int total;
// 鍒濆鍖栧悜閲忥紝浣夸箣鑳藉瑁呭叆testscore鏁扮粍涓殑鍏冪礌
vector
testscore + sizeof(testscore) / sizeof(int));
vector
// 鎺掑簭骞舵樉绀哄悜閲忎腑鐨勬暟鎹
sort(vecTestScore.begin(), vecTestScore.end());
cout << "Sorted Test Scores:" << endl;
for (vi=vecTestScore.begin(); vi != vecTestScore.end(); vi++)
{ cout << *vi << ", "; }
cout << endl;
// 鏄剧ず缁熻淇℃伅
// min_element 杩斿洖涓涓 _iterator_ 绫诲瀷鐨勫璞★紝璇ュ璞℃寚鍚戝兼渶灏忕殑閭d釜鍏冪礌銆
//鈥*鈥濊繍绠楃鎻愬彇鍏冪礌涓殑鍊笺
vi = min_element(vecTestScore.begin(), vecTestScore.end());
cout << "The lowest score was " << *vi << "." << endl;
//涓巑in_element绫讳技锛宮ax_element鏄夊嚭鏈澶у笺
vi = max_element(vecTestScore.begin(), vecTestScore.end());
cout << "The highest score was " << *vi << "." << endl;
// 浣跨敤澹版槑鍑芥暟锛坧redicate function锛屾寚vecTestScore.begin()鍜寁ecTestScore.end()锛夋潵纭畾閫氳繃鑰冭瘯鐨勪汉鏁般
cout << count_if(vecTestScore.begin(), vecTestScore.end(), passed_test) <<
" out of " << vecTestScore.size() <<
" students passed the test" << endl;




发表于 2009-1-5 19:48
| 











