SGI

raw_storage_iterator<ForwardIterator, T>

类别:分配器、迭代器、适配器 组件类型:类型

描述

在 C++ 中,运算符new为对象分配内存,然后通过调用构造函数在该位置创建对象。但是,有时将这两个操作分开很有用。 [1] 如果i是一个指向未初始化内存区域的迭代器,那么可以使用construct在由i. Raw_storage_iterator指向的位置创建对象。raw_storage_iterator是一个适配器,它使此过程更加方便。如果r是一个iraw_storage_iterator,那么它具有一些底层迭代器。表达式*r = x.

等效于

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));     
  transform(A1, A1 + N, 
            raw_storage_iterator<Int*, int>(A2),
            negate<int>());
}

construct(&*i, x)

示例

定义

在标准头文件 memory 和非标准向后兼容头文件 iterator.h 中定义。 描述 模板参数
参数 默认值rOutputIterator  
迭代器的底层迭代器的类型。 T  

将用作构造函数参数的类型。

模型

Output Iterator

的 value_type 具有一个构造函数,该构造函数接受类型为

公有基类

无。

成员 成员 描述
定义位置 r raw_storage_iterator(ForwardIterator x)
见下文。 raw_storage_iterator(const raw_storage_iterator&) 平凡迭代器
复制构造函数 raw_storage_iterator(const raw_storage_iterator&) raw_storage_iterator& operator=(const raw_storage_iterator&)
赋值运算符 模型 raw_storage_iterator& operator*()用于实现 输出迭代器 表达式. [2]
*i = x 模型 raw_storage_iterator& operator*()用于实现 输出迭代器 表达式. [2]
raw_storage_iterator& operator=(const Sequence::value_type&) 模型 raw_storage_iterator& operator++()
前置递增。 模型 raw_storage_iterator& operator++(int)
后置递增。 output_iterator_tag iterator_category(const raw_storage_iterator&) 迭代器标记

返回迭代器的类别。这是一个全局函数,而不是成员函数。

新成员r.
这些成员未在 Output Iterator 要求中定义,而是特定于 描述
函数 raw_storage_iterator(ForwardIterator i)r创建一个i.
其底层迭代器为 raw_storage_iterator& operator=(const T& val)类型要求在迭代器指向的位置构造一个的 value_type 对象,使用val

作为构造函数的参数。

注释

[1] 特别是,这种低级内存管理用于某些容器类的实现。r[2] 请注意如何通过实现赋值。通常,一元operator*必须定义为返回一个代理对象,其中代理对象定义operator=r以执行插入操作。在本例中,为简单起见,代理对象是本身。也就是说,*ii返回, 并且。表达式*i = ti = t

。但是,您不应该依赖此行为。这是一个实现细节,并且不保证在将来的版本中保持不变。

另请参阅, construct, 分配器, destroy uninitialized_copy, uninitialized_fill,
[Silicon Surf] [STL Home]
uninitialized_fill_n 版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。