C++中STL用法超详细总结(收藏级)
深入理解C++ STL:通用数据结构与算法的精要解析
在C++编程中,STL(Standard Template Library)是不可或缺的一部分,它提供了丰富的数据结构和算法,如基础的容器、迭代器、以及通用的排序和查找功能。STL的设计理念是数据结构和算法分离,基于模板,实现高效且灵活的编程。
1. 核心组件
- 容器: STL包含多种容器,如list、vector(线性)、deque(双端队列)、set(无序但唯一)、map(关联且有序)等,每种都有特定的应用场景。例如,vector适合连续存储,而list适合频繁插入和删除操作。
- 迭代器: 用于访问容器中的元素,隐藏了底层实现的细节,支持遍历、插入和删除操作。
- 算法: 提供诸如sort、find、binary_search等通用操作,分别对应排序、查找等任务,部分算法如stable_sort保证了稳定性。
- 仿函数和适配器: 通过函数对象(functor)和适配器(adapter)实现更灵活的函数式编程。
2. 功能细节
- 查找与定位: find、lower_bound和upper_bound用于查找元素的位置,search系列函数则用于在序列中查找子序列。
- 排序与通用: inplace_merge允许自定义排序,merge和partition根据条件分割数据,random_shuffle随机打乱顺序,sort和stable_sort提供不同稳定性要求的排序。
- 删除与替换: copy和replace系列函数用于元素复制和替换,迭代器操作如remove和iter_swap提供了高效的操作。
- 算术与生成: accumulate、partial_sum进行数学运算,generate生成指定范围的元素,transform用于修改元素并生成新序列。
- 关系与集合: 比较、包含、组合、交集、差集、对称差集等操作,提供了丰富的集合操作。
- 堆排序: make_heap、pop_heap、push_heap和sort_heap支持堆的维护和排序。
- 仿函数与适配器: 通过operator()实现函数对象,如逻辑运算符、算术运算符等,提供定制化操作。
3. 示例与应用
- 自定义比较: 如在sort和查找操作中,可以提供自定义的比较函数,以满足特定的排序或查找规则。
- 适配器: 如queue和priority_queue,提供特定应用场景的顺序容器。
- 容器操作: 如vector的push_back、pop_back,以及deque的高效插入和删除操作。
- 括号匹配: 通过stack实现括号匹配算法,展示了迭代器和算法的结合。
通过以上介绍,STL为C++程序员提供了强大的数据结构和算法工具,熟练掌握这些工具将极大提升代码的可读性和性能。从基础的容器操作到高级的算法应用,STL都是C++编程中不可或缺的基石。
绛旓細1. 鏍稿績缁勪欢 - 瀹瑰櫒: STL鍖呭惈澶氱瀹瑰櫒锛屽list銆乿ector锛堢嚎鎬э級銆乨eque锛堝弻绔槦鍒楋級銆乻et锛堟棤搴忎絾鍞竴锛夈乵ap锛堝叧鑱斾笖鏈夊簭锛夌瓑锛屾瘡绉嶉兘鏈夌壒瀹氱殑搴旂敤鍦烘櫙銆備緥濡傦紝vector閫傚悎杩炵画瀛樺偍锛岃宭ist閫傚悎棰戠箒鎻掑叆鍜屽垹闄ゆ搷浣溿- 杩唬鍣: 鐢ㄤ簬璁块棶瀹瑰櫒涓殑鍏冪礌锛岄殣钘忎簡搴曞眰瀹炵幇鐨勭粏鑺傦紝鏀寔閬嶅巻銆佹彃鍏ュ拰鍒犻櫎鎿嶄綔銆
绛旓細4. STL涓爣鍑嗘暟缁-vector(鏂囦欢),涓ょ閬嶅巻鏂瑰紡:(1)閫氳繃涓嬫爣鎿嶄綔绗;(2)浣跨敤杩唬鍣,濡倂ector<int>::iterator iter;鍙互閫氳繃瀵筰terator瑙e紩鐢ㄦ潵鐩存帴璁块棶瀹為檯鐨勫厓绱*iter;STL鎻愪緵浜嗕綔鐢ㄤ簬瀹瑰櫒绫诲瀷鐨勬硾鍨嬬畻娉,澶存枃浠躲5. 鏂囧瓧甯搁噺鏄笉鍙鍧鐨勩6. 甯哥敤鐨勫嚑涓浆涔夊簭鍒:newline(鎹㈣绗) \n \14horizontal tab(姘村钩...
绛旓細涓汉璁や负鍏朵富瑕佷环鍊间綋鐜板湪浠ヤ笅鍑犱釜鏂归潰:1,瀵逛簬STL鐨勫疄鐜板叧閿甶terator涓鑸兘浣跨敤浜嗕袱绉嶆柟寮忔弿鍙,涓绉嶆瘮杈冭佸紡鐨勫嚱鏁版柟娉,涓绉嶆槸鏂扮殑?traits鎶宸,杩欐牱璇昏呭彲浠ラ潪甯告竻妤氱殑鐭ラ亾鎶鏈殑婕旇繘銆2,鎻愪緵浜嗕竴涓猄TL LITE鐗堟湰,闃呰杩欐牱鐨勪唬鐮佸鑷繁鐨勬彁楂橀潪甯稿ぇ銆3,涔︿腑鎻愪緵鐨勬祴璇曟ā鍧楀浜庤鑰呮潵璇翠篃鏄潪甯告湁鐨勪竴绔,瀵逛簬鎯虫墿灞昐TL...
绛旓細3.2琛3鍔汼TL锛氬欢缁嚑骞寸殑缁忓吀鍔犵偣娉曪紝鍦ㄤ笂闈袱绉嶅姞鐐瑰嚭鐜板悗杩欑鍔犵偣娉曞姡鍔挎槑鏄銆備紭鐐癸細宸叉棤浼樼偣銆傜己鐐癸細杈撳嚭涓嶅銆傛荤粨锛氭棤鍔汼TL杩欑鎯熸亹澶╀笅涓嶄贡锛屾兂娴戞按鎽搁奔鐨勫仛娉曢渶瑕佷弗鍘夋壒璇勶紝浣嗕簨鍦ㄤ汉涓猴紝鎴戜滑鏃犳硶闃绘灏卞彧鑳藉共鐪嬬潃浜嗐傛浘缁忔墍鏈夌殑闂ㄦ淳鍔犵偣鏀荤暐閮芥槸寤虹珛鍦―T鐨勫姞鐐规硶涓婏紝鑰屾晱STL鍑虹幇鍚庯紝鐜板湪鎵鏈夌殑鍔...
绛旓細璧涗腑锛岄熷害涓庡績鎬佸苟閲嶏紝鍊熼壌浠栦汉鐨勮В棰樻濊矾锛屼粩缁嗛槄璇婚鐩紝鍕ゅ姞缁冧範鏄叧閿銆傝禌鍚庣殑鍙嶆濇荤粨鍚屾牱閲嶈锛岃褰曚綘鐨勬濊冭繃绋嬶紝瀛︿範浠栦汉鐨勭粡楠岋紝涓嶆柇鎴愰暱銆傛湳璇В鏋怉K锛氬畬缇庤В绛擜C锛氭纭瓟妗圵A锛氱瓟妗堥敊璇疶LE锛氳秴鏃禖E锛氱紪璇戦敊璇疪E锛氳繍琛屾椂閿欒MLE锛氬唴瀛樻孩鍑篜E锛氭牸寮忛敊璇疧LE锛氳緭鍑鸿秴闄愮垎闆讹細寰楀垎涓洪浂鎵撴槦闃燂細闈...
绛旓細5.7銆STL閫傞厤鍣 6. C++杩涢樁 銆奀++ Primer銆 鏈鏂扮増鏈:绗笁鐗(绗洓鐗堝浗澶栧凡涓婃灦, 鍥藉唴涓浜涚綉涓婁功搴椾篃鍦ㄩ璁腑) 閫傚悎鏈変赴瀵C缁忛獙,缂轰箯C++缁忛獙鐨勩備笉杩囨垜涓汉涓鐩磋涓烘涔﹀甫鐫杩囦簬寮虹儓鐨凜璇█鐨勭棔杩,瀵逛簬C++鐨勫涔犳湭蹇呮槸 濂戒簨銆 銆奣he C++ Programming Language銆/銆奀++绋嬪簭璁捐璇█銆 鏈鏂扮増鏈:绗笁鐗堢壒鍒増 绠绉...
绛旓細鍥炵瓟锛氫竴銆佸畼鑱岀浉鍏崇殑闂ㄦ淳/浠诲姟鍒嗘瀽銆 A銆佸畼鑱屼换鍔$浉鍏冲垎鏋 鍐涢渶浠诲姟鍒嗘瀽 鍐涢渶鎶奸佸洖鏉ユ椂鍊,鑻ラ亣鍒扮殑涓绘湁浣庡弽闇囥 鎴樹簨涓殑宸¢讳富鍜屽皬鎬兘鏈変綆鍙 鐚涘皢鐨勫皬鎬湁浣庡弽 涓绘狹S鏈夐珮蹇呮妧鑳 椋炶醇鍜屽己鐩楀皬鎬湁浣庡弽 閮ㄥ垎鎬湁楂橀鎶鑳姐 濡傛灉鍖哄唴楝艰胺瀛愬ソ鏀剁殑璇濆氨鏀堕樀鍒风涓涓(鍐涢渶) 姣忔槦鏈熶笁涓皬鏃朵笁鍊...
绛旓細寰幆缁撴瀯鍙互鍑忓皯婧愮▼搴忛噸澶嶄功鍐欑殑宸ヤ綔閲,鐢ㄦ潵鎻忚堪閲嶅鎵ц鏌愭绠楁硶鐨勯棶棰,杩欐槸绋嬪簭璁捐涓渶鑳藉彂鎸ヨ绠楁満鐗归暱鐨勭▼搴忕粨鏋,C璇█涓彁渚涘洓绉嶅惊鐜,鍗砱oto寰幆銆亀hile寰幆銆乨o 鈥搘hile寰幆鍜宖or寰幆銆傚洓绉嶅惊鐜彲浠ョ敤鏉ュ鐞嗗悓涓闂,涓鑸儏鍐典笅瀹冧滑鍙互浜掔浉浠f浛鎹,浣嗕竴鑸笉鎻愬$敤goto寰幆,鍥犱负寮哄埗鏀瑰彉绋嬪簭鐨勯『搴忕粡甯镐細缁欑▼搴忕殑...
绛旓細5.3銆STL瀹瑰櫒5.4銆丼TL杩唬 5.5銆丼TL绠楁硶 5.6銆侀涓庡畾涔塖TL鏁板璞 5.7銆丼TL閫傞厤鍣 6. C++杩涢樁 銆奀++ Primer銆 鏈鏂扮増鏈:绗笁鐗(绗洓鐗堝浗澶栧凡涓婃灦, 鍥藉唴涓浜涚綉涓婁功搴椾篃鍦ㄩ璁腑) 閫傚悎鏈変赴瀵C缁忛獙,缂轰箯C++缁忛獙鐨勩備笉杩囨垜涓汉涓鐩磋涓烘涔﹀甫鐫杩囦簬寮虹儓鐨凜璇█鐨勭棔杩,瀵逛簬C++鐨勫涔犳湭蹇呮槸 濂戒簨銆 銆奣he C++ Progra...
绛旓細5.3銆STL瀹瑰櫒5.4銆丼TL杩唬 5.5銆丼TL绠楁硶 5.6銆侀涓庡畾涔塖TL鏁板璞 5.7銆丼TL閫傞厤鍣 6. C++杩涢樁 銆奀++ Primer銆 鏈鏂扮増鏈:绗笁鐗(绗洓鐗堝浗澶栧凡涓婃灦, 鍥藉唴涓浜涚綉涓婁功搴椾篃鍦ㄩ璁腑) 閫傚悎鏈変赴瀵C缁忛獙,缂轰箯C++缁忛獙鐨勩備笉杩囨垜涓汉涓鐩磋涓烘涔﹀甫鐫杩囦簬寮虹儓鐨凜璇█鐨勭棔杩,瀵逛簬C++鐨勫涔犳湭蹇呮槸 濂戒簨銆 銆奣he C++ Progra...