stl定义的五个全局函数,作用于未初始化空间,便于容器的实现。包括contruct(), destroy()和uninitialized_copy(), uninitialized_fill(), uninitialized_fill_n,后面三个分别对应于高层次函数copy(), fill(),fill_n(),都是stl算法。
1. construct(),属于<stl_construct.h>头文件,是内联函数
template<class T1, class T2>
inline void construct(T1* p, const T2& value) {
new (p) T1(value) //placement new,在已分配的内存上创建对象,这里就是在p的空间上创建了一个
新的值为value的T1对象
}
2. destroy()
//version 1
template<class T>
inline void destroy(T* pointer) {
pointer->~T();
}
//第二个版本,这里需要判断需要析构的元素类别是否有trivial destructor,关于trivial的定义,可参考我的
c++专栏文章《trivial/nontrivial函数》
template<class ForwardIterator>
inline void destroy(ForwardIterator first, ForwardIterator last) {
__destroy(first, last, value_type(first));
}
template<class ForwardIterator, class T>
inline void __destroy(ForwardIterator first, ForwardIterator last, T*) {
typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor;
__destroy_aux(first, last, trivial_destructor);
}
//元素的数值型别(value_type)有non-trivial destructor
template<class ForwardIterator>
inline void __destroy_aux(ForwardIterator first, ForwardIterator last, __false_type) {
for(; first < last; ++first)
destroy(&*first);
}
//元素的数值型别(value_type)有trivial destructor
template<class ForwardIterator>
inline void __destroy_aux(ForwardIterator first, ForwardIterator last, __true_type) {
}
如果是trivial,就什么都不做,否则一一destroy()
3. uninitialized_copy()
//意义就是调用construct(&*(result + (i - first)), *i)
template<class InputIterator , class ForwardIterator>
ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator result);
4. uninitialized_fill()
//意义就是调用construct(&*i, x)
template<class ForwardIterator, class T>
void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T&x);
5. uninitialized_fill_n()
//意义就是调用construct(&*i, x)
template<class ForwardIterator, class Size, class T>
void uninitialized_fill(ForwardIterator first, Size n, const T&x);