在介紹前面幾種演算法後,剩下的幾種演算法將在這一部分集中介紹。partition演算法主要是根據定義的規則,將範圍內的元素分為兩部分。
heap演算法主要是關於堆部分的演算法。而min/max類演算法主要是關於數值部分的演算法。演算法說明與示例如下:
操作說明
partition(beg,end,op)
根據op操作將[beg,end)分為兩部分,返回值為false部分首位置或者last
stable_partiton(beg,end,op)
根據op進行穩定的類別區分
is_partition(beg,end,op)
判斷[beg,end)是否根據op操作分為了兩個部分
partition_copy(beg,end,dest,desf,op)
根據op操作將[beg,end)分別拷貝到dest、desf
partition_point(beg,end,op)
返回劃分後第乙個false元素的位置 操作
說明push_heap(beg,end)
將end-1所指元素新增到已有堆[beg,end-1)中並建立新堆(可自定義規則)
pop_heap(beg,end)
交換第乙個元素到end-1,並對[beg,end-1)重新建堆
make_heap(beg,end)
對[beg,end)元素進行建堆操作
sort_heap(beg,end)
對[beg,end)堆進行排序(可自定義排序規則)
is_heap(beg,end)
判斷[beg,end)是否為堆
is_heap_until(beg,end)
返回第乙個不符合建堆的元素位置(可自定義建堆規則) 操作
說明min(a,b)
返回a,b兩者中的較小者,相等則返回a
max(a,b)
返回兩者中的較大者,相等返回a
minmax(a,b)
將a、b比較結果以pair(min,max)返回,相等返回pair(a,b)
min_element(beg,end)
返回[beg,end)中最小的元素的位置,若都相等返回first
max_element(beg,end)
返回[beg,end)中最大的元素的位置,若都相等返回first
minmax_element(beg,end)
將[beg,end)中最小,最大的元素的位置以pair(min_pos,max_pos)返回
**示例:
// partition algorithm example
#include
#include
#include
using
namespace
std;
bool isodd(int i)
int main() ;
vector
::iterator bound;
bound = partition(myvector.begin(), myvector.end(), isodd);
// print out content:
cout
<< "odd elements: ";
for (vector
::iterator it = myvector.begin(); it != bound; ++it)
cout
<< *it << ' ';
cout
<< endl;
cout
<< "even elements: ";
for (vector
::iterator it = bound; it != myvector.end(); ++it)
cout
<< *it << ' ';
cout
<< endl;
return0;}
//output:
//odd elements: 1 9 3 7 5
//even elements: 6 4 8 2
// range heap example
#include
#include
#include
using
namespace
std;
int main () ;;
make_heap (v.begin(),v.end());
cout
<< "initial max heap : "
<< v.front() << '\n';
pop_heap (v.begin(),v.end()); v.pop_back();
cout
<< "max heap after pop : "
<< v.front() << '\n';
v.push_back(99); push_heap (v.begin(),v.end());
cout
<< "max heap after push: "
<< v.front() << '\n';
sort_heap (v.begin(),v.end());
cout
<< "final sorted range :";
for (unsigned i=0; icout
<< ' '
<< v[i];
cout
<< '\n';
return0;}
//output:
//initial max heap : 30
//max heap after pop : 20
//max heap after push: 99
//final sorted range : 5 10 15 20 99
// minmax example
#include
#include
using
namespace
std;
int main () );
cout
<< "minmax(): ";
cout
<< result.first << ' '
<< result.second << '\n';
return0;}
//output:
//minmax(): 1 5
STL(二十四)數值演算法
一組對容器元素進行數值計算的模板函式,包括容器元素求和accumulate 兩序列元素的內積inner product 容器元素的一系列部分元素和partial sum 容器每對相鄰元素的差 由sgi c stl擴充套件的遞增賦值iota以及n次方power計算等。include 一 遞增賦值iot...
演算法筆記學習記錄(2) STL
c 標準模板庫 stl 1 vector 變長陣列 定義 vector name vectorname 訪問 1.像普通陣列一樣通過下標訪問 2.通過迭代器訪問,迭代器iterator可以理解為一種類似指標的東西,定義 vector iterator it,可以通過 it來訪問vector裡的元素。...
幾種STL排序演算法比較
接著上一回的說,對 stl幾種排序演算法做一比較,比較並不全面,僅僅對 std sort std stable sort c 標準庫qort 和std heap sort 做一比較,因為這是用的最多的,其底層實現已足夠說明日常生活中排序問題所需要考慮的問題。程式 如下 1 2 3 45 6 7 89...