STL演算法之判斷式

2021-08-04 02:33:57 字數 3531 閱讀 1077

轉接自stl演算法

1. equal(v1.beg,v1.end,v2.beg,perd) 判斷v1區間是否所有元素與v2子區間對應滿足謂詞perd

2. is_permutation(v1.beg,v1.end,v2.beg,perd) 判斷v1區間是否任何元素都能在v2子區間找到滿足謂詞perd

3. mismatch() 返回兩段序列第一次出現對應位置不相等的pair值

4. lexicographical_compare() 判斷在字典排序下某序列是否小於另一串行

5. is_sorted() 判斷區間元素是否排過序

6. is_sorted_until() 返回區間第乙個未遵守排序準則的元素

7. is_partitioned() 判斷區間能否通過謂詞條件分為兩組

8. partition_point() 返回分為兩組的開始元素

9. is_heap() 區間元素是否形成heap(堆)

10. 10. is_heap_until() 返回區間內第乙個不滿足形成堆的元素

11. all_of() 是否區間所有元素滿足謂詞pred

12. any_of() 是否至少有乙個元素滿足謂詞pred

13. none_of() 是否區間無元素滿足謂詞

#include 

#include

#include

#include

using

namespace

std;

// 1. equal(v1.beg,v1.end,v2.beg,perd) 判斷v1區間是否所有元素與v2子區間對應滿足謂詞perd

// 2. is_permutation(v1.beg,v1.end,v2.beg,perd) 判斷v1區間是否任何元素都能在v2子區間找到滿足謂詞perd

// 3. mismatch() 返回兩段序列第一次出現對應位置不相等的pair值

// 4. lexicographical_compare() 判斷在字典排序下某序列是否小於另一串行

// 5. is_sorted() 判斷區間元素是否排過序

// 6. is_sorted_until() 返回區間第乙個未遵守排序準則的元素

// 7. is_partitioned() 判斷區間能否通過謂詞條件分為兩組

// 8. partition_point() 返回分為兩組的開始元素

// 9. is_heap() 區間元素是否形成heap(堆)

// 10.is_heap_until() 返回區間內第乙個不滿足形成堆的元素

// 11.all_of() 是否區間所有元素滿足謂詞pred

// 12.any_of() 是否至少有乙個元素滿足謂詞pred

// 13.none_of() 是否區間無元素滿足謂詞

void test(const

vector

& a,const

vector

& b)

; vector

v2;

if (is_permutation(v1.begin(), v1.end(), v2.begin()))

cout

<< "v1 of v2 by unsorted "

<< endl;

else

cout

<< "v1 not of v2 by unsorted"

<< endl;

//3auto pair = mismatch(v1.begin(),v1.end(), v2.begin());

if (pair.first != v1.end())

//4string s1 = "marco";

string s2 = "working";

if (lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end()))

cout

<< "s1 < s2 by dictionary-sort"

<< endl;

//5vector

v3;

//預設謂詞是less<>()

if (is_sorted(v3.begin(), v3.end(),less()))

cout

<< "v3 had sorted"

<< endl;

//6vector

v4;

auto fpos = is_sorted_until(v4.begin(), v4.end(), greater());

if (fpos != v4.end())

auto f = (const

int& value)

;//7

if (is_partitioned(v4.begin(), v4.end(), f))

cout

<< "v4 has can divide by value > 6"

<< endl;

//8auto partpos = partition_point(v4.begin(), v4.end(), f);

if (partpos != v4.end())

cout

<< "the start divide pos is "

<< *partpos << endl;

//9vector

v5;

if (is_heap(v5.begin(), v5.end()))

cout

<< "v5 can develop to heap"

<< endl;

//10

auto heapos = is_heap_until(v5.begin(), v5.end());

if (heapos != v5.end())

cout

<< "since "

<< *heapos << " it can't develop to heap"

<< endl;

vector

v6;

auto f1 = (const

int& value)

;//11 12 13

if (!all_of(v6.begin(), v6.end(), f1))

cout

<< "not all >= 5"

<< endl;

if (any_of(v6.begin(), v6.end(), f1))

cout

<< "at least has a >=5"

<< endl;

if (none_of(v6.begin(), v6.end(), f1))

cout

<< "none >= 5"

<< endl;

}int main()

; vector

vec1;

test(vec0, vec1);

system("pause");

return

0;}

STL之演算法

演算法是指解決問題的方 而完整的描述,對於規範的輸入,在有限時間內要獲得所需要的輸出。不同的演算法可能使用不同的時間 空間或效率完成同樣的任務。想要評估乙個演算法的好壞,目前可以通過時間複雜度和空間複雜度來進行衡量。時間複雜度,是指演算法執行指令所需的計算量。演算法的執行時間和其所要處理的資料之間存...

STL 用純函式做判斷式

一 必要的概念 判斷式是返回bool 或者其他可以隱式轉化為bool的東西 判斷式在stl中廣泛使用。標準關聯容器的比較函式是判斷式,判斷式函式常常作為引數傳遞給演算法,比如find if和多種排序演算法。純函式是返回值只依賴於引數的函式。如果f是乙個純函式,x和y是物件,f x,y 的返回值僅當x...

STL之關聯式容器

sets 沒有重疊的數字,沒有權利指定新元素的位置 set typedef std set obj obj col col.insert 3 col.insert 1 col.insert 5 col.insert 4 col.insert 1 col.insert 6 col.insert 2 f...