Week8 Notes
變易算法:
copy:對象拷貝
templateinline
OutIt copy(InIt_First, _InIt _Last, _OutIt _Dest)
Copy_backward:少一個參數
Copy_if:多一個判斷函數
Swap:交換對象
Swap_ranges:交換某個區域的對象
Transform:函數作用后放入指定區間
也可以對函數輸入兩個區域的變量
replace:舊值替換為新值
replace_copy,先拷貝再替換
fill:把val賦值給所有元素
generate
remove,remove_if:移除某個數或符合條件的數
remove_copu先拷貝再移除
unique,返回的是迭代器
reverse,rotate
排序算法
sorting
template inline
void sort(_RanIt _First, _RanIt _Last)
需要提供operator <
int elements[] = {-1, 2, 3, -100, 200, 5};
std::vector v(elements,elements+6);
std::sort(v.begin(), v.end());
binary_search
templateinline
bool binary_search(_FwdIt _First, _FwdIt_Last, const _Ty& _Val)
在容器中查找等于val的元素,首先要排序
merge
將排好序的兩個區間元素合并到dest
基于排序集合的一些算法
includes
set_union
set_intersection
set_difference
templateinline
bool includes(_InIt1 _First1, _InIt1_Last1, _InIt2 _First2, _InIt2 _Last2)
判別一個區間中是否包含另一個區間中的函數,這兩個區間都是排好序的
set operations
基于堆得算法
make_heap
push_heap
pop_heap
sort_heap
make_heap
template inline
void make_heap (_RanIt _First, _RanIt_Last)
將區間轉換成一個堆
對結構采用max_heap來維持平衡二叉樹
int elements[] = {1, 4, 200, 8, 100, 5, 7};
cons tint n = sizeof(elements)/sizeof(int);
std::make_heap(elements, elements+n);
push_heap
template inline
void push_heap(_RanIt _First, _RanIt _Last)
向堆中添加一個元素,算法的前提是假設這個區間已經是一個堆,堆結構采用max_heap,維持平衡二叉樹
heap算法pop_heap
templateinline
void pop_heap(_RanIt, _RanIt _Last)
從堆中彈出一個元素,該算法的前提是假設該區間已經是個堆,被彈出的對元素是根頂元素
堆結構采用max_heap,維持平衡二叉樹
heap算法sort_heap
將堆中的元素進行排序,sort的做法是不斷pop_heap,因為每次pop都可以獲得堆中最大元素
泛型數值算法
泛型數值算法包含在頭文件中
包括
accumulate
inner_product
partial_sum
adjacent_difference
accumulate
對區間中的每個元素進行累加,也可以加func
inner_product,默認加,可以自己加函數
partial_sum
到每一位的和;
也可以到每一位的函數作用
adjacent_difference
和partial_sum反一下,函數作用在當前元素和上一個元素上。
內存分配器