c++ stl 内存基本处理工具(与construct()、destroy()并列)

from

1.1 uninitialized_copy()

template 
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 
void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T& x);

uninitialized_fill()也能够使我们将内存配置和对象的构造行为分离开来。如果[first,last)范围内的每个迭代器都指向未初始化的内存,那么uninitialized_fill()会在该范围内产生x的复制品。换句话说,uninitialized_fill()会针对操作范围内的每个迭器i,调用construct(&*i,x),在i所指之处产生x的复制品。
uninitialized_fill()也能够使我们将内存配置和对象的构造行为分离开来。如果[first,last)范围内的每个迭代器都指向未初始化的内存,那么uninitialized_fill()会在该范围内产生x的复制品。换句话说,uninitialized_fill()会针对操作范围内的每个迭器i,调用construct(&*i,x),在i所指之处产生x的复制品。

1.3 uninitialized_fill_n()

template 
ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n, const T& x);

uninitialized_fill_n()能够使我们将内存配置与对象构造行为分离开来。它会为指定范围内的所有元素设定相同的初值。如果[first,first+n)范围内的每一个迭代器都指向未初始化的内存,那么uninitialized_fill_n()会调用copy constructor,在该范围内产生x的复制品。也就是说,面对[first,first+n)范围内的每个迭代器i,uninitialized_fill_n会调用construct(&*i,x),在对应位置处产生x的复制品。uninitialized_fill_n()也具有"commit or rollback"语意。
c++ stl 内存基本处理工具(与construct()、destroy()并列)_第1张图片
__type_traits则负责萃取型别(type)的特性。这个型别是否具备non-trivial default ctor?是否具备non-trivial copy ctor?是否具备non-trivial assignment operator?是否具备non-trivial dtor?如果答案是否定的,我们在对这个型别进行构造、析构、拷贝、赋值等操作时,就可以采用最有效率的措施,而采用内存直接处理操作如malloc()、memcpy()等等,获得最高效率。

你可能感兴趣的:(c/c++,programming,language,stl,学习之路)