//複雜演算法
#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...