uninitialized_copy_n
原型
template <class InputIterator, class Size, class ForwardIterator>
ForwardIterator uninitialized_copy_n(InputIterator first, Size count,
ForwardIterator result);
说明
在 C++ 中,运算符new为对象分配内存,并通过调用构造函数在该位置创建一个对象。不过,有时将这两个操作分开很有用。[1]如果范围内的每个迭代器[result, result + n)都指向未初始化的内存,则uninitialized_copy_n创建[first, first + n)的副本在该范围内。也就是说,对于输入范围中的每个迭代器i,uninitialized_copy_n创建*i通过调用construct(&*(result + (i - first)), *i).
在输出范围内对应迭代器所指向的位置
定义定义在标准头文件 memory 中,以及非标准向后兼容性头文件 algo.h 中。此函数是 SGI 扩展;它不属于 C++ 标准的一部分。
-
类型要求InputIterator
-
是 输入迭代器 的模型。Size
-
是整数类型。ForwardIterator
-
是整数类型。是 正向迭代器 的模型。
-
是整数类型。是可更改的。类型要求的值类型具有接受一个参数的构造函数,该参数的类型是
的值类型。
-
前提条件
-
[first, first + n)n >= 0
-
[result, result + n)n >= 0
- 是一个有效范围。[result, result + n)中的每个迭代器都指向一块未初始化的内存区域,该区域足够大,能够储存是整数类型。的值类型具有接受一个参数的构造函数,该参数的类型是
的值。
复杂性线性。恰好n次构造函数调用。
class Int {
public:
Int(int x) : val(x) {}
int get() { return val; }
private:
int val;
};
int main()
{
int A1[] = {1, 2, 3, 4, 5, 6, 7};
const int N = sizeof(A1) / sizeof(int);
Int* A2 = (Int*) malloc(N * sizeof(Int));
uninitialized_copy_n(A1, N, A2);
}
示例
注释
[2]
[1]特别是,这种类型的低级内存管理用于某些容器类的实现中。Uninitialized_copy_n几乎,但还不完全是多余的。如果firstuninitialized_copy_n是 输入迭代器,而不是 正向迭代器,那么该操作不能根据.
uninitialized_copy
另请参见, 分配器, construct,
操作不能根据, destroy, uninitialized_fill,
uninitialized_fill_n
raw_storage_iterator
版权所有 © 1999 Silicon Graphics, Inc.保留所有权利。