内存基本处理工具——全局函数

来源:互联网 发布:员工数据保密协议 编辑:程序博客网 时间:2024/06/05 10:04

STL定义有五个全局函数,作用于未初始化空间上。这样的功能对于容器的实现很有帮助。前两个函数是用于构造的 construct () 和用于折构的 destroy(),另三个函数是 uninitialized_copy(),uninitialized_fill (),uninitialized_fill_n(),分别对应于高层次函数 copy(),fill(),fill_n()——这些都是STL算法。


uninitialized_fill_n  

本函数接受三个参数:

迭代器 first 指向预初始化空间的初始处。
n 表示欲初始化空间的大小。
x 表示初值。
下面是 uninitialized_fill_n 函数的编程实现:
templateinline ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n, const T& x){return uninitialized_fill_n(first,n,x,value_type(first));//以上利用 value_type()取出first的 value_type}templateinline ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n, const T& x, T1*){typedef typename _type_traits::is_POD_type is_POD;return uninitialized_fill_n_aux(first, n, x, is_POD());}//如果是POD型别,执行流程就会转到以下函数templateinline ForwardIterator uninitialized_fill_n_aux(ForwardIterator first, Size n, const T& x, _true_type){return fill_n(first,n,x);}//如果不是POD型别,执行流程就会转到以下函数templateForwardIterator uninitialized_fill_n_aux(ForwardIterator first, Size n, const T& x, _false_type){ForwardIterator cur = first;for (; n > 0; --n, ++cur)construct(&*cur,x);return cur;}

uninitialized_copy

接受三个参数:

迭代器 first 指向输入端的起始位置。
迭代器 last 指向输入端的结束位置(前闭后开区间)。
迭代器 result 指向输出端(欲初始化空间)的起始处。
下面是 uninitialized_copy 函数的编程实现:
templateinline ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator result){return _uninitialized_copy(first, last, result, value_type(result));//以上利用value_type()取出first的value_type}templateinline ForwardIterator _uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator result, T*){typedef typename _type_traits::is_POD_type is_POD;return _uninitialized_copy_aux(first,last,result,is_POD());}//如果是POD型别,执行流程就会转到以下函数templateinline ForwardIterator _uninitialized_copy_aux(InputIterator first, InputIterator last, ForwardIterator result, _true_type){return copy(first,last,result);}//如果不是POD型别,执行流程就会转到以下函数templateForwardIterator _uninitialized_copy_aux(InputIterator first, InputIterator last, ForwardIterator result, _false_type){ForwardIterator cur = result;for (; first != last; ++first, ++cur)construct(&*cur,*first);return cur;}

uninitialized_fill

接受三个参数:

迭代器 first 指向输出端(欲初始化空间)的起始处。
迭代器 last 指向输出端(欲初始化空间)的结束处(前闭后开区间)。
x 表示初值。
下面是 uninitialized_fill 函数的编程实现:
templateinline void uninitialized_fill(ForwardIterator first,ForwardIterator last,const T& x){    _uninitialized_fill(first, last, x, value_type(first));//以上利用 value_type()取出first的 value_type}templateinline void _uninitialized_fill(ForwardIterator first, ForwardIterator last, const T& x, T1*){typedef typename _type_traits::is_POD_type is_POD;_uninitialized_fill_aux(first, last, x, is_POD());}//如果是POD型别,执行流程就会转到以下函数templateinline void _uninitialized_fill_aux(ForwardIterator first, ForwardIterator last, const T& x, _true_type){fill(first, last, x);  //调用STL算法fill()}//如果不是POD型别,执行流程就会转到以下函数templatevoid _uninitialized_fill_aux(ForwardIterator first, ForwardIterator last, const T& x, _false_type){ForwardIterator cur = first;for (; cur!=last;++cur)construct(&*cur, x);}


1 0