STL(二十二)變易演算法
變易演算法是一組能夠修改容器元素資料的模板函式,可進行序列資料的複製、交換、替換、填充、移除、旋轉、隨機抖動和分別。這些演算法對迭代器有較高的要求,具體的迭代器型別隨各個演算法而定,或前向迭代器 、或雙向迭代器、又或者是隨機迭代器,以提供演算法所需要的迭代器操作。應用變易演算法時,先要檢查容器的迭代器是否符合要求,防止產生編譯錯誤。
一、元素複製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
重新分割排列容器的元素,但可以保持原有元素的先後順序
相關文章
- STL(二十一)非變易演算法演算法
- STL 演算法集合演算法
- STL::演算法::常見演算法演算法
- STL(二十三)排序演算法排序演算法
- C++_STL—演算法Algorithm篇C++演算法Go
- C++ STL演算法總結C++演算法
- 常用的 STL 查詢演算法演算法
- Concurrency(二十二: 非阻塞演算法上)演算法
- STL(二十四)數值演算法演算法
- C++_STL—較為常用的演算法C++演算法
- Effective STL Item 43:優先使用STL泛型演算法以取代手寫迴圈 (轉)泛型演算法
- 【演算法學習】STL庫 大小根堆的用法演算法
- C++進階:STL演算法9--邊界C++演算法
- STL
- 進階篇_STL中通用演算法處理資料演算法
- 《STL原始碼剖析》 -- stl_algo.h原始碼Go
- 《STL原始碼剖析》-- stl_algobase.h原始碼Go
- 《STL原始碼剖析》-- stl_hashtable.h原始碼
- 《STL原始碼剖析》-- stl_multimap.h原始碼
- 《STL原始碼剖析》-- stl_map.h原始碼
- 《STL原始碼剖析》-- stl_multiset.h原始碼
- 《STL原始碼剖析》-- stl_set.h原始碼
- 《STL原始碼剖析》-- stl_tree.h原始碼
- 《STL原始碼剖析》-- stl_heap.h原始碼
- 《STL原始碼剖析》-- stl_slist.h原始碼
- 《STL原始碼剖析》-- stl_queue.h原始碼
- 《STL原始碼剖析》-- stl_stack.h原始碼
- 《STL原始碼剖析》-- stl_deque.h原始碼
- 《STL原始碼剖析》-- stl_list.h原始碼
- 《STL原始碼剖析》-- stl_pair.h原始碼AI
- 《STL原始碼剖析》-- stl_vector.h原始碼
- 《STL原始碼剖析》-- stl_iterator.h原始碼
- 《STL原始碼剖析》-- stl_uninitialized.h原始碼Zed
- 《STL原始碼剖析》-- stl_alloc.h原始碼
- STL——STL中vector的實現原理
- 演算法學習之路|用C++刷演算法會用到的STL(一)——vector演算法C++
- 演算法學習之路|用C++刷演算法會用到的STL(二)——set演算法C++
- STL::pairAI