SGI

temporary_buffer<ForwardIterator, T>

类别:分配器 组件类型:类型

说明

某些算法,比如stable_sortinplace_merge自适应算法:它们尝试使用额外的临时内存来存储中间结果,如果有额外的内存,则它们的运行时复杂度会更优。这些算法使用temporary_buffer来分配额外的内存。

temporary_buffer'的构造函数采用两个参数,firstlast,其类型为ForwardIterator; 该构造函数分配一个足够大的缓冲区,以容纳N个类型为T的对象,其中0 <= N <= last - first [1],它使用类型为T的对象填充缓冲区。 成员函数begin()end()返回指向缓冲区开头和结尾的迭代器。

请注意,缓冲区中的元素保证已初始化;也就是说,begin()指向类型为T的对象,而不是原始内存。但是,缓冲区元素的初始值未指定。您不应依靠它们被初始化为任何特定值。

temporary_buffer没有复制构造函数或赋值运算符。那些操作语义复杂,而且不太有用。

(STL 的早期版本使用get_temporary_bufferreturn_temporary_buffer代替temporary_buffer. temporary_buffer更方便,因为它不需要使用uninitialized_copy,在某些情况下,它也更高效。此外,使用temporary_buffer比使用get_temporary_bufferreturn_temporary_buffer.)

编写异常保护代码要容易得多

int main()
{
  vector<int> V(50);
  iota(V.begin(), V.end(), 1);

  temporary_buffer<vector<int>::iterator, int> buf(V.begin(), V.end());
  copy(V.rbegin(), V.rbegin() + buf.size(), buf.begin());
  copy(buf.begin(), buf.end(), ostream_iterator<int>(cout, "\n"));
}

示例

定义

在标准头文件 memory 以及非标准向后兼容性头文件 algo.h 中进行定义。该类是 SGI 扩展;不属于 C++ 标准。

模板参数 说明 参数
ForwardIterator 默认temporary_buffer作为参数传递给  
T 构造函数的迭代器的类型。 临时缓冲区中存储的对象的类型。 [2]

iterator_traits<ForwardIterator>::value_type

模型temporary_buffer无。

有点类似于 容器,但它不提供整个 容器 接口。特别是,它不是 DefaultConstructibleAssignable 的模型。

值类型的参数的构造函数。

模型

公共基类

成员 说明
temporary_buffer(ForwardIterator first, 
                 ForwardIterator last)
分配一个临时缓冲区,最多可容纳last - first元素类型T,并且构造那些元素。元素的初始值未指定。前提条件[first, last)是一个有效范围。
~temporary_buffer() 销毁临时缓冲中的元素并释放缓冲本身。
T* begin() 返回指向缓冲第一个元素的指针。
T* end() 返回指向超出缓冲最后一个元素的一个位置的指针。
ptrdiff_t requested_size() const 返回的值last - first的对象,其中firstlast是传递给构造函数的参数。
ptrdiff_t size() const 返回临时缓冲中元素的数量,end() - begin()。返回值符合约束0 <= size() <= requested_size().

新成员

备注

[1]请求的大小last - first。临时缓冲的大小永远不会大于请求的大小,但是很可能更小;此大小甚至可能是零。目的是temporary_buffer将分配一个尽可能大的缓冲而不会影响性能。请注意,确定此最大大小非常困难:它取决于缓存大小、物理内存与虚拟内存、堆碎片化,等等。良好的temporary_buffer的实现必须是不可移植的。

[2] 迭代器特征机制依赖于模板部分专业化。如果您的编译器尚未实现此功能,那么您将无法使用此默认参数;您必须同时提供模板参数。

参见


[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc.。保留所有权利。 商标信息