STL學習記錄(十四) 其它幾種演算法

2021-07-04 06:12:43 字數 3228 閱讀 3555

在介紹前面幾種演算法後,剩下的幾種演算法將在這一部分集中介紹。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...