from <stl_uninitialized>
1.1 uninitialized_copy()
template <class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator result);
uninitialized_copy()使我们能够将内存的配置与对象的构造行为分离开来。如果作为输出目的地的[result,result+(last-first))范围内的每一个迭代器都指向未初始化区域,则uninitialized_copy()会使用copy constructor(),给身为输入源之[first,last)范围内的每一个对象产生一份复制品,放进输入范围中。换句话说,针对输出范围内的每一个迭代器i,该函数会调用construct(&*(result+(i-first)),i),产生i的复制品,放置于输出范围的相对位置上。
c++标准规格书要求uninitialized_copy()具有"commit or rollback"语意,要么“构造出所有必要元素”,要么“不构造任何东西”。
1.2 uninitialized_fill()
template <class ForwardIterator, class T>
void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T& x);