STL複雜演算法

2021-07-10 15:08:35 字數 1891 閱讀 1244

//複雜演算法

#include#include#include#include#include#includeusing namespace std;

#define n_count 6

/*以下函式 最後都預設使用operator《進行比較 自己也可以提供仿函式 都應用於有序區間

lower_bound(f,l,val);

返回小於val區間的下乙個位置 迭代器

upper_bound(f,l,val);

//返回 大於val的第乙個位置迭代器

bool binary_search(f,l,val);

//二分法搜尋 判斷 值是否存在

pairequal_range(f,l,val)

返回的一對迭代器 為插入該值(遞增或者遞減)的範圍 極端情況 都為begin() 或者都為end()

next_permutation 下乙個排列

prev_permutation 上乙個排列

random_shuffle 隨機重排函式

上述三個函式 實現很巧妙 有時間就實現一遍

*/templatevoid display(const vector& vec)

int main(void)

; int len = sizeof(a) / sizeof(a[0]);

vectorvec(a,a+len);

typedef vector::iterator v_ite;

v_ite ite = vec.end();

pairpair = equal_range(vec.begin(),vec.end(),-1);

if (ite != pair.first)

if (ite != pair.second)

//排列演算法

/* stl 提供兩個求排列的 函式 next_permutation 和 prev_permutation

*/ string strarra = ;

vectorsvec(strarra,strarra+sizeof(strarra)/ sizeof(strarra[0]));

display(svec);

puts("---------------------------");

for (size_t i = 0; i < n_count; ++i) }

//通過排列的個數 控制函式呼叫次數是不可靠的

//因為可鞥沒有下乙個 序列 或者區間有相同的元素出現

/* the 1 is :li zhang li

the 2 is :zhang li li

the 4 is :li zhang li

the 5 is :zhang li li

*/ sort(svec.begin(),svec.end());

puts("-------------------------");

for (size_t i = 0; i < n_count; ++i) }

//排序一下也沒什麼用 如果區間元素不重複出現那麼

//(先排序)可以通過 n!的迴圈次數 來得到排列結果

/* the 0 is :li zhang li

the 1 is :zhang li li

the 3 is :li zhang li

the 4 is :zhang li li

*/ //隨機重排函式 類似於洗牌演算法 可以提供自己的隨機數函式

random_shuffle(vec.begin(), vec.end());

display(vec);

return 0;

}

STL 演算法細節

一 概論 1 質變演算法 會改變操作物件的值 2 非質變演算法 不改變操作物件的值 3 所有泛型演算法的前兩個引數都是一對迭代器 二 演算法的泛化過程 1 將乙個敘述完整的演算法轉化為程式 是任何訓練有素的程式設計師勝任愉快的工作。2 泛化是乙個漸進過程,從具體到抽象的過程。3 迭代器是乙個行為類似...

STL演算法概述

除了容器類和迭代器,stl還提供了一些通用的演算法與容器類的元素工作。這些讓你做的事情,如搜尋,排序,插入,重新排序,刪除,複製元素的容器類。請注意,作為全球性的功能,操作使用迭代器演算法的實現。這意味著,每個演算法只需要實現一次,它一般會自動工作,提供了一組迭代器 包括自定義的容器類 的所有容器。...

stl演算法 next permutation剖析

在標準庫演算法中,next permutation應用在數列操作上比較廣泛.這個函式可以計算一組資料的全排列.但是怎麼用,原理如何,我做了簡單的剖析.首先檢視stl中相關資訊.函式原型 template boolnext permutation bidirectionaliterator first...