1. 程式人生 > >c++容器使用之排序、去重

c++容器使用之排序、去重

使用場景

消除重複單詞,假設有以下單詞

over jumps red slow the fox quick turtle the red

思路

  1. 將單詞放入vector
  2. 對vector進行排序,使得重複的單詞相鄰出現
  3. 使用標準庫的unique演算法重排vector,使得不重複的元素出現在vector開始部分
  4. 由於演算法不能執行容器操作,使用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返回的迭代器指向最後一個不重複元素之後的位置。此位置之後的元素仍然存在,但我們不知道它們的值是