C 中vector和list排序

2021-07-04 21:26:48 字數 1415 閱讀 4119

容器、泛型演算法、和類是不是就是c++相對於c「++」的那部分呢?暫時先這麼認為吧。如果這篇部落格有幸被別人看到,請幫忙指出。——c++ 菜鳥 留。

vector的迭代器是隨機訪問迭代器,支援泛型演算法的sort及其演算法。

//vector排序

#include #include #include #include #include using namespace std;

//兩個謂詞函式

bool isshorter(const string &pre,const string &cur)

int main()

//字典序

sort(strvec.begin(),strvec.end());

//去除重複的單詞,返回乙個迭代器,表示無重複的值得範圍的結束

vector::iterator iter_unique = unique(strvec.begin(),strvec.end());

//去除容器末尾重複的單詞

strvec.erase(iter_unique,strvec.end());

sort(strvec.begin(),strvec.end(),isshorter);//按字元長短排序,相同長度的按字典序

cout<<"排序後的單詞:"<::iterator iter = strvec.begin();

while (iter!=strvec.end())

cout<::size_type cnt = count_if(strvec.begin(),strvec.end(),gt4);

cout《其中unique函式返回乙個迭代器,unique後需要呼叫erase手動刪除容器尾部重複的單詞。

而list容器上的迭代器是雙向的,不支援隨機訪問,因此不能使用需要隨機訪問迭代器的sort演算法。c++為list容器提供了特有的演算法。

//list排序

#include #include #include #include #include using namespace std;

bool isshorter(const string &pre,const string &cur)

int main()

strlist.sort();//字典序

strlist.unique();//去除重複的單詞

strlist.sort(isshorter);//按字元長短排序,相同長度的按字典序

cout<<"排序後的單詞:"<::iterator iter = strlist.begin();

while (iter!=strlist.end())

cout<::size_type cnt = count_if(strlist.begin(),strlist.end(),gt4);

cout《在list的sort排序中,unique會自動去除重複的單詞,程式設計師無需手動刪除。

C 中vector和list區別

記憶體空間 vector和陣列類似,記憶體空間是連續的,並且其實位址不變 list是由雙向鍊錶實現的,記憶體空間是不連續的。訪問 vector能夠進行高效的隨機訪問操作,時間複雜度為o 1 list是通過指標訪問資料,不能進行隨機訪問,時間複雜度是o n 插入 刪除 vector因位址時連續的,進行...

C 中vector和list的區別

1.vector資料結構 vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。因此能高效的進行隨機訪問,時間複雜度為o 1 但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶體空間並進行記...

C 容器中列表list和向量vector區別

關於容器 容器是可以用於存放各種型別的資料的資料結構 如 vectorv1 c 標準模板庫 stl 提供三類容器 1 順序容器,如vector,list,deque 雙端佇列 等 2 關聯容器,如set 集合 multiset 多重集合 map 對映 multimap 多重對映 等 3 容器介面卡,...