GeekBand STL与泛型编程 第三周

2016-07-02  本文已影响31人  hui1429

9.泛型算法_变易算法

变易算法是指那些改变容器中对象的操作。

copy

template<class _InIt, class _OutIt> inline
_OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest)

copy_backward

template<class _BidIt1, class _BitIt2> inline
_BitIt2 copy_backward(_BidIt1 _First, _BitIt2 _Last, _BidIt2 _Dest)

copy_n

template<class _InIt, class _Diff, class _OutIt> inline
_OutIt copy_n(_InIt _First, _Diff _Count, _OutIt _Dest)

copy_if

template<class _InIt, class _OutIt, class _Pr> inline
_OutIt copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred)

swap

template<class _Ty> inline
void swap(_Ty& _Left, _Ty& _Right)

swap_ranges

template<class _FwdIt1, class _FwdIt2> inline
void swap_ranges(_FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest)

transform(1)

template<class _InIt, class _OutIt, class _Fn1> inline
_OutIt transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func)

transform(2)

template<class _InIt1, class _InIt1, class _OutIt, class _Fn2> inline
_OutIt transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _OutIt _Dest, _Fn2 _Func)

replace

template<class _FwdIt, class _Ty> inline
void replace(_FwdIt _First, _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)

replace_if

template<class _FwdIt, class _Pr, class _Ty> inline
void replace(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val)

replace_copy

template<class _InIt, class _OutIt, class _Ty> inline
void replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval)

replace_copy_if

template<class _InIt, class _OutIt, class _Pr, class _Ty> inline
void replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred, const _Ty& _Val)

fill

template<class _FwdIt, class _Ty> inline
void fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)

generate

template<class _FwdIt, class _Fn0> inline
void fill(_FwdIt _First, _FwdIt _Last, _Fn0 _Func)

remove

template<class _FwdIt, class _Ty> inline
_FwdIt remove(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)

remove_if

template<class _FwdIt, class _Pr> inline
_FwdIt remove_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred)

remove_copy

template<class _FwdIt, class _OutIt, class _Ty> inline
_OutIt remove_copy(_FwdIt _First, _FwdIt _Last, _OutIt _Dest, const _Ty& _Val)

unique

template<class _FwdIt> inline
_FwdIt unique(_FwdIt _First, _FwdIt _Last)

reverse

template<class _BitIt> inline
void reverse(_BitIt _First, _BitIt _Last)

rotate

template<class _FwdIt> inline
_FwdIt rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last)

random_shuffle

template<class _RanIt> inline
void random_shuffle(_RanIt _First, _RanIt _Last) //采用rand

template<class _RanIt class _Fn1> inline
void random_shuffle(_RanIt _First, _RanIt _Last, _Fn1&& _Func) //自定义

partition

template<class _FwdIt, class _Pr> inline
_FwdIt partition(_FwdIt _First, _FwdIt _Last, _Pr _Pred)

10.泛型算法_排序

sort

template<class _RanIt> inline
void sort(_RanIt _First, _RanIt _Last)

partial_sort

template<class _RanIt> inline
void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last)

binary_search

template<class _FwdIt, class _Ty> inline
bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)

merge

template<class _InIt1, class _InIt2, class _OutIt> inline
_OutIt merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
基于排序集合的一些算法

includes

template<class _InIt1, class _InIt2> inline
bool includes(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2)
基于堆的算法

make_heap

template<class _RanIt> inline
void make_heap(_RanIt _Frist, _RanIt _Last)

push_heap

template<class _RanIt> inline
void push_heap(_RanIt _Frist, _RanIt _Last)

pop_heap

template<class _RanIt> inline
void pop_heap(_RanIt _Frist, _RanIt _Last)

sort_heap

template<class _RanIt> inline
void sort_heap(_RanIt _Frist, _RanIt _Last)

11.泛型算法_数值算法

#include<numeric>

accumulate(1)

template<class _InIt, class _Ty> inline
_Ty accumulate(_InIt _First, _InIt _Last, _Ty _Val)

accumulate(2)

template<class _InIt, class _Ty, class _Fn2> inline
_Ty accumulate(_InIt _First, _InIt _Last, _Ty _Val, _Fn2 _Func)

inner_product(1)

template<class _InIt1, class _InIt2, class _Ty> inline
_Ty inner_product(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Ty _Val)

inner_product(2)

template<class _InIt1, class _InIt2, class _Ty, class _Fn21, class _Fn22> inline
_Ty inner_product(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Ty _Val, _Fn21 _Func1, _Fn22 _Func2)

partial_sun(1)

template<class _InIt, class _OutIt> inline
_OutIt partial_sun(_InIt _First, _InIt _Last, _OutIt _Dest)

partial_sun(2)

template<class _InIt, class _OutIt, class _Fn2> inline
_OutIt partial_sun(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn2 _Func)

adjacent_difference(1)

template<class _InIt, class _OutIt> inline
_OutIt adjacent_difference(_InIt _First, _InIt _Last, _OutIt _Dest)

adjacent_difference(2)

template<class _InIt, class _OutIt, class _Fn2> inline
_OutIt adjacent_difference(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn2 _Func)

12.内存分配器

实现自定义的内存分配器:

namespace wj{
    template <typanme T>
    struct MyAllocator{ ... };
}
typedef T           value_type;
typedef T*          pointer;
typedef const T*    const_pointer;
typedef T&          reference;
typedef const T&    const_reference;
typedef size_t      size_type;
typedef int         difference_type;
template<typename U> struct rebind{
    typedef MyAllocator<U> other;
}
MyAllocator(){ }
MyAllocator(const MyAllocator<T>&){ }
template<typename U>
MyAllocator(const MyAllocator<U>&){ }
pointer allocate(size_type n, const void *p = 0){
    T* buffer = (T*)malloc((size_t)(n * sizeof(T)));
    if(buffer == NULL){ // error handling
        ...
    }
    return buffer;
}
voie deallocate(pointer p, size_type n){
    if(p != NULL)
        free(p);
}
void vonstruct(pointer p, const T& value){
    new(p)T(value);
}
void destroy(pointer p, size_tpye n){
    p->~T();
}
size_type max_size() const{
    return size_type(UINT_MAX / sizeof(T));
}
pointer address(reference x){
    return (pointer)&x;
}
const_pointer address(const_reference x){
    return (const_pointer)&x;
}
上一篇 下一篇

猜你喜欢

热点阅读