第11章 泛型演算法 4

2021-06-02 07:36:33 字數 1245 閱讀 9698

11.2.3 對容器元素重新排序的演算法

stdafx.h

#include using namespace std;

bool isshorter(const string &s1, const string &s2);

bool gt6(const string &s);

stdafx.cpp

#include "stdafx.h"

#include using namespace std;

bool isshorter(const string &s1, const string &s2)

bool gt6(const string &s)

main.cpp

#include "stdafx.h"

int _tmain(int argc, _tchar* argv)

1. 去除重複

首先對此vector物件排序。sort演算法帶有兩個迭代器實參,指出要排序的元素範圍。這個演算法使用小於(<)操作符比較元素。

2. unique的使用

unique演算法很適合用於解決這個問題,它帶有兩個指定元素範圍的迭代器引數。該演算法刪除相鄰的重複元素,然後重新排列輸入範圍內的元素,並且返回乙個迭代器,表示無重複的值範圍的結束。

呼叫unique「刪除」了相鄰的重複值。給「刪除」加上引號是因為unique實際上並沒有刪除任何元素,而是將無重複的元素複製到序列的前端,從而覆蓋相鄰的重複元素。unique返回的迭代器指向超出無重複的元素範圍末端的下一位置。

3. 使用容器操作刪除元素

需要呼叫容器的erase操作實現。

演算法不直接修改容器的大小。如果需要新增或刪除元素,則必須使用容器操作。

4. 定義需要的實用函式

stable_sort和count_if。使用這些演算法,還需要乙個配套的實用函式,稱為謂詞(predicate)。謂詞是做某些檢測的函式,返回用於條件判斷的型別,指出條件是否成立。

5. 排序演算法

標準庫定義了stable_sort演算法,stable_sort保留相等元素的原始相對位置。stable_sort函式第二個過載版本帶有三個形參,第三個形參:比較元素所使用的謂詞函式的名字。這個謂詞函式必須接受兩個實參,實參的型別必須與元素型別相同,並返回乙個可用作條件檢測的值。

6. 統計長度不小於6的單詞

count_if演算法返回使謂詞函式返回條件成立的元素的個數。

第11章 泛型演算法

泛型演算法本身從不執行容器操作,只是單獨依賴迭代器和迭代器操作實現。演算法從不直接新增或刪除元素。back inserter函式是迭代器介面卡,迭代器介面卡使用乙個物件作為實參,並生成乙個適應其實參行為的新物件。謂詞是做某些檢測的函式,返回用於條件判斷的型別,指出條件是否成立。三種插入迭代器的區別在...

第11章 泛型演算法 2

11.2 初窺演算法 使用泛型演算法必須包含algorithm標頭檔案。標準庫還定義了一組泛化的算術演算法 generalized numeric algorithm 其命名習慣與泛型演算法相同。使用這些演算法則必須包含numeric標頭檔案。11.2.1 唯讀演算法 vectorvec for i...

第11章 泛型演算法 5

11.3 再談迭代器 1 插入迭代器 insert iterator 這類迭代器與容器繫結在一起,實現在容器中插入元素的功能。2 iostream迭代器 iostream iterator 這類迭代器可與輸入或輸出繫結在一起,用於迭代遍歷所關聯的io流。3 反向迭代器 reverse iterato...