类模板
<memory>

std::raw_storage_iterator

template <class OutputIterator, class T>  class raw_storage_iterator;
原始存储迭代器
此类迭代器操作未初始化的内存块。

常规迭代器操作已经构造好的特定类型的对象。一个raw_storage_iterator将其中一个常规迭代器封装到一个特殊的 输出迭代器 中,该迭代器在写入前会在被指向的位置构造对象。

它的定义与以下行为相同:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class OutputIterator, class T>
  class raw_storage_iterator :
    public iterator<output_iterator_tag,void,void,void,void>
{
protected:
  OutputIterator iter_;

public:
  explicit raw_storage_iterator (OutputIterator x) : iter_(x) {}
  raw_storage_iterator<OutputIterator,T>& operator* ()
    { return *this; }
  raw_storage_iterator<OutputIterator,T>& operator= (const T& element)
    { new (static_cast<void*>(&*iter_)) T (element); return *this; }
  raw_storage_iterator<OutputIterator,T>& operator++ ()
    { ++iter_; return *this; }
  raw_storage_iterator<OutputIterator,T> operator++ (int)
    { raw_storage_iterator<OutputIterator,T> tmp = *this; ++iter_; return tmp; }
};

模板参数

OutputIterator
底层迭代器类型。
T
将在每个元素位置上构造的对象类型。

成员函数

构造函数
raw_storage_iterator对象是从迭代器构造的。
operator*
无操作。返回对象的引用。
operator=
在迭代器指向的位置构造类型为 T 的新对象,并用作右侧操作数的副本初始化其值。
operator++
增加迭代器位置。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// raw_storage_iterator example
#include <iostream>
#include <memory>
#include <vector>
#include <string>

int main () {
  std::vector<std::string> myvector;
  myvector.push_back ("first");
  myvector.push_back ("second");
  myvector.push_back ("third");

  std::pair<std::string*,std::ptrdiff_t> result = std::get_temporary_buffer<std::string>(3);
  std::string* pstr=result.first;

  std::raw_storage_iterator<std::string*,std::string> raw_it (pstr);

  copy (myvector.begin(), myvector.end(), raw_it);

  for (int i=0; i<3; i++)
    std::cout << pstr[i] << ' ';
  std::cout << '\n';

  std::return_temporary_buffer(pstr);

  return 0;
}

输出

first second third 


另见