c++容器使用之排序、去重
阿新 • • 發佈:2019-08-07
使用場景
消除重複單詞,假設有以下單詞
over | jumps | red | slow | the | fox | quick | turtle | the | red |
思路
- 將單詞放入vector
- 對vector進行排序,使得重複的單詞相鄰出現
- 使用標準庫的unique演算法重排vector,使得不重複的元素出現在vector開始部分
- 由於演算法不能執行容器操作,使用erase成員完成真正的刪除操作
程式碼
void elimDups(vector<string> &words) { // 按字典序排序 sort(words.begin(), words.end()); // unique重排輸入範圍 // 排列在範圍的前部,返回指向不重複區域之後一個位置的迭代器 auto end_unique = unique(words.begin(), words.end()); // 刪除重複單詞 words.erase(end_unique, words.end()); }
使用unique
呼叫unique後,vector將變為:
fox | jumps | over | quick | red |
slow | the | turtle | ??? | ??? |
返回的end_unique迭代器指向第一個???
words的大小並未改變,它仍有10個元素。unique返回的迭代器指向最後一個不重複元素之後的位置。此位置之後的元素仍然存在,但我們不知道它們的值是