STL 變序類演算法

2021-10-05 14:08:07 字數 3183 閱讀 9997

前言:

所謂變序類演算法,就是在乙個容器裡面,把原有的順序改變,在這裡主要是介紹幾個演算法,reverse翻轉,rotate旋轉次序以及random_shuffle隨機化打亂順序。

reverse

template

<

class

bidirectionaliterator

>

void

reverse

( bidirectionaliterator _first,

bidirectionaliterator _last);

原始碼:
template

<

class

bidirectionaliterator

>

void reverse (bidirectionaliterator first, bidirectionaliterator last)

}

舉個例子
// reverse algorithm example

#include

// std::cout

#include

// std::reverse

#include

// std::vector

int main (

)

還有個**reverse_copy(first,end,result)**演算法,跟前面唯一不同的就是把翻轉後的元素放入目的容器

template

<

class

bidirectionaliterator

,class

outputiterator

>

outputiterator reverse_copy (bidirectionaliterator first,

bidirectionaliterator last, outputiterator result)

;

rotate

template

<

class

forwarditerator

>

forwarditerator rotate (forwarditerator first, forwarditerator middle,

forwarditerator last)

;

rotate(beg,newbeg,end)將區間[beg,end)內的元素進行旋轉,執行後*newbeg成為新的第一元素;

原始碼:

template

<

class

forwarditerator

>

void rotate (forwarditerator first, forwarditerator middle,

forwarditerator last)

}

舉個例子:
// rotate algorithm example

#include

// std::cout

#include

// std::rotate

#include

// std::vector

int main (

)

還有乙個rotate_copy,跟前面的也是,把結果輸出到目的容器,其他用法都一樣,沒區別。

template

<

class

forwarditerator

,class

outputiterator

>

outputiterator rotate_copy (forwarditerator first, forwarditerator middle,

forwarditerator last, outputiterator result)

;

力扣旋轉陣列傳送門

random_shuffle

//原始碼

template

<

class

randomaccessiterator

,class

randomnumbergenerator

>

void random_shuffle (randomaccessiterator first, randomaccessiterator last,

randomnumbergenerator& gen)

}//generator by default (1)

template

<

class

randomaccessiterator

>

void random_shuffle (randomaccessiterator first,

//randomaccessiterator last);

specific generator (2)

template

<

class

randomaccessiterator

,class

randomnumbergenerator

>

void random_shuffle (randomaccessiterator first, randomaccessiterator last,

randomnumbergenerator&& gen)

;

在stl中,函式random_shuffle()用來對乙個元素序列進行隨機排序。有個注意點就是對於set、map(自帶排序功能)的容器或者一下非連續性容器無法使用。別人寫的精彩部落格

一般來說,如果只是僅僅打亂容器順序,下面給出操作:

# include

srand

(unsigned

(time(0

)));

//設定種子

random_shuffle

(vector.

begin()

,vector.

end(),

(int i)

->

int)

變序性演算法

reverse beg,end reverse copy sourcebeg,sourceend,destbeg 旋轉元素次序 rotate beg,newbeg,end 將beg end元素旋轉,然後newbeg成為第乙個元素 rotate copy beg,newbeg,end,destbeg ...

c 演算法 變序性演算法

改變元素的次序,但不改變元素值,這種演算法不能用於關聯性容器,因為在關聯性容器中,元素有一定的次序,不能隨意改動 reverse 將元素的次序逆轉 reverser copy 複製的同時,逆轉元素順序 rotate 旋轉元素的次序 rotate copy 複製的同時,旋轉元素的次序 next per...

STL演算法之變序型演算法

reverse 將元素次序逆轉 reverse copy 將逆序的元素複製到另一串行 rotate 將 first,mid mid,end 元素對調 rotate copy 將rotate 後的序列複製到另一串行 next permutation 得到元素的下一排列次序 並判斷是否是全排列 prev...