STL(二十二)變易演算法

CopperDong發表於2017-09-03

     變易演算法是一組能夠修改容器元素資料的模板函式,可進行序列資料的複製、交換、替換、填充、移除、旋轉、隨機抖動和分別。這些演算法對迭代器有較高的要求,具體的迭代器型別隨各個演算法而定,或前向迭代器 、或雙向迭代器、又或者是隨機迭代器,以提供演算法所需要的迭代器操作。應用變易演算法時,先要檢查容器的迭代器是否符合要求,防止產生編譯錯誤。

一、元素複製copy

#include <stl_algobase.h>

template <class InputIter, class OutputIter, class Distance>

inline  OutputIter copy(InputIter first, InputIter last, OutputIter result, input_iterator_tag, Distance*) {

    for (; first != last; ++result, ++first)

        *result = *first;

    return result;

}

二、反向複製copy_backward

     將一個迭代器區間元素複製到另一迭代器區間上,只是複製過程是從最後的元素開始複製,直到首元素複製出來。

三、元素交換swap

template <class T>

inline void swap(T& a, T& b) {

    T tmp = a;

    a = b;

    b = tmp;

}

四、迭代器交換iter_swap


五、區間元素交換swap_ranges

用於進行兩個迭代器區間元素的交換

六、元素變換transform

用於實行容器元素的變換操作

七、替換replace

將指定元素值替換為新值

八、條件替換replace_if

是replace演算法一個帶謂詞判斷的版本

九、替換和複製replace_copy

先進行元素替換,再將元素複製到新容器

十、條件替換和複製replace_copy_if

是replace_copy演算法的一個帶謂詞判斷的版本

十一、填充fill

將同一個值填充到容器的一個或多個元素處

十二、n次填充fill_n

可指定填充的元素個數

十三、隨機生成元素generate

為容器生成新元素

十四、隨機生成n個元素generate_n

限定了可填入容器的數值個數

十五、移除複製remove_copy

是一個條件複製,將原容器中不等於某個給定值的元素複製到新容器

十六、條件移除複製remove_copy_if
remove_copy演算法的一個帶謂詞判斷的版本

十七、移除remove

將容器中等於某個給定值的元素全部移除掉

十八、條件移除remove_if

remove演算法的一個帶謂詞判斷的版本

十九、不連續重複元素複製unique_copy

複製不連續重複的元素

二十、剔除連續重複元素unique

剔除容器中連續重複的元素

二十一、元素反向reverse

用於容器元素的反向排列

二十二、反向複製reverse_copy

用於反向複製容器元素

二十三、旋轉rotate

用於旋轉某個迭代器區間的元素

二十四、旋轉複製rotate_copy

通過複製的方法實現旋轉,比rotate演算法更簡單和高效,但需要佔用較多的記憶體空間

二十五、隨機抖動random_shuffle

對容器元素進行隨機的排列

二十六、隨機取樣random_sample

對區間元素進行隨機取樣

二十七、容器分割partition

用於重新分割排列容器的元素

二十八、容器穩定分割stable_partition

重新分割排列容器的元素,但可以保持原有元素的先後順序






















相關文章