日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL笔记(4)关于erase,remove

發(fā)布時(shí)間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL笔记(4)关于erase,remove 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

STL筆記(4)關(guān)于erase,remove

你要erase的元素很容易識別。它們是從區(qū)間的“新邏輯終點(diǎn)”開始持續(xù)到區(qū)間真的終點(diǎn)的原來區(qū)間的元素。要除去那些元素,你要做的所有事情就是用那兩個迭代器調(diào)用erase的區(qū)間形式(參見條款5)。因?yàn)閞emove本身很方便地返回了區(qū)間新邏輯終點(diǎn)的迭代器,這個調(diào)用很直截了當(dāng):

vector<int>?v;????????????????????????//?正如從前
v.erase(remove(v.begin(),?v.end(),?99),?v.end());????????//?真的刪除所有
????????????????????????????//?等于99的元素
cout?<<?v.size();????????????????????????//?現(xiàn)在返回7

把remove的返回值作為erase區(qū)間形式第一個實(shí)參傳遞很常見,這是個慣用法。事實(shí)上,remove和erase是親密聯(lián)盟,這兩個整合到list成員函數(shù)remove中。這是STL中唯一名叫remove又能從容器中除去元素的函數(shù):

list<int>?li;????????????//?建立一個list
????????????????//?放一些值進(jìn)去
li.remove(99);????????????//?除去所有等于99的元素:
????????????????//?真的刪除元素,
????????????????//?所以它的大小可能改變了

坦白地說,調(diào)用這個remove函數(shù)是一個STL中的矛盾。在關(guān)聯(lián)容器中類似的函數(shù)叫erase,list的remove也可以叫做erase。但它沒有,所以我們都必須習(xí)慣它。我們所處于的世界不是所有可能中最好的世界,但卻是我們所處的。(附加一點(diǎn),條款44指出,對于list,調(diào)用remove成員函數(shù)比應(yīng)用erase-remove慣用法更高效。)

一旦你知道了remove不能“真的”從一個容器中刪除東西,和erase聯(lián)合使用就變成理所當(dāng)然了。你要記住的唯一其他的東西是remove不是唯一這種情況的算法。另外有兩種“類似remove”的算法:remove_if和unique。

remove和remove_if之間的相似性很直截了當(dāng)。所以我不會細(xì)講,但unique行為也像remove。它用來從一個區(qū)間刪除東西(鄰近的重復(fù)值)而不用訪問持有區(qū)間元素的容器。結(jié)果,如果你真的要從容器中刪除元素,你也必須成對調(diào)用unique和erase,unique在list中也類似于remove。正像list::remove真的刪除東西(而且比erase-remove慣用法高效得多)。list::unique也真的刪除鄰近的重復(fù)值(也比erase-unique高效)。

(譯注:《C++標(biāo)準(zhǔn)程序庫》111頁5.6節(jié)有remove的詳細(xì)解釋)

總結(jié)

以上是生活随笔為你收集整理的STL笔记(4)关于erase,remove的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。