类别:分配器 | 组件类型:类型 |
temporary_buffer'的构造函数采用两个参数,first和last,其类型为ForwardIterator; 该构造函数分配一个足够大的缓冲区,以容纳N个类型为T的对象,其中0 <= N <= last - first [1],它使用类型为T的对象填充缓冲区。 成员函数begin()和end()返回指向缓冲区开头和结尾的迭代器。
请注意,缓冲区中的元素保证已初始化;也就是说,begin()指向类型为T的对象,而不是原始内存。但是,缓冲区元素的初始值未指定。您不应依靠它们被初始化为任何特定值。
temporary_buffer没有复制构造函数或赋值运算符。那些操作语义复杂,而且不太有用。
(STL 的早期版本使用get_temporary_buffer和return_temporary_buffer代替temporary_buffer. temporary_buffer更方便,因为它不需要使用uninitialized_copy,在某些情况下,它也更高效。此外,使用temporary_buffer比使用get_temporary_buffer和return_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")); }
模板参数 | 说明 | 参数 |
---|---|---|
ForwardIterator | 默认temporary_buffer作为参数传递给 | |
T | 构造函数的迭代器的类型。 | 临时缓冲区中存储的对象的类型。 [2] |
成员 | 说明 |
---|---|
temporary_buffer(ForwardIterator first, ForwardIterator last) |
分配一个临时缓冲区,最多可容纳last - first元素类型T,并且构造那些元素。元素的初始值未指定。前提条件[first, last)是一个有效范围。 |
~temporary_buffer() | 销毁临时缓冲中的元素并释放缓冲本身。 |
T* begin() | 返回指向缓冲第一个元素的指针。 |
T* end() | 返回指向超出缓冲最后一个元素的一个位置的指针。 |
ptrdiff_t requested_size() const | 返回的值last - first的对象,其中first和last是传递给构造函数的参数。 |
ptrdiff_t size() const | 返回临时缓冲中元素的数量,end() - begin()。返回值符合约束0 <= size() <= requested_size(). |
[1]请求的大小是last - first。临时缓冲的大小永远不会大于请求的大小,但是很可能更小;此大小甚至可能是零。目的是temporary_buffer将分配一个尽可能大的缓冲而不会影响性能。请注意,确定此最大大小非常困难:它取决于缓存大小、物理内存与虚拟内存、堆碎片化,等等。良好的temporary_buffer的实现必须是不可移植的。
[2] 迭代器特征机制依赖于模板部分专业化。如果您的编译器尚未实现此功能,那么您将无法使用此默认参数;您必须同时提供模板参数。