uninitialized_copy
原型
template <class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
ForwardIterator result);
描述
在 C++ 中,运算符new为对象分配内存,然后通过调用构造函数在该位置创建对象。但是,有时将这两个操作分开很有用。 [1] 如果范围内的每个迭代器[result, result + (last - first))指向未初始化的内存,则uninitialized_copy创建[first, last)在该范围内的副本。也就是说,对于输入范围中的每个迭代器i,uninitialized_copy创建*i在输出范围中对应迭代器指向的位置通过调用construct(&*(result + (i - first)), *i).
定义
在标准头文件 memory 和非标准向后兼容头文件 algo.h 中定义。类型要求
-
InputIterator是 输入迭代器 的模型。
-
ForwardIterator是 前向迭代器 的模型。
-
ForwardIterator是可变的。
-
ForwardIterator的值类型有一个构造函数,它接受一个参数,其类型为InputIterator的值类型。
前提条件
-
[first, last)是一个有效的范围。
-
[result, result + (last - first))是一个有效的范围。
- 中的每个迭代器[result, result + (last - first))指向一个足够大的未初始化内存区域,可以存储一个值。ForwardIterator的值类型。
复杂度
线性。正好last - first个构造函数调用。示例
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(A1, A1 + N, A2);
}
注释
[1] 特别地,这种低级内存管理用于某些容器类的实现。
另请参见
分配器, construct, destroy,
uninitialized_fill, uninitialized_fill_n,
raw_storage_iterator
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。
商标信息