📄 temporary_buffer.html
字号:
<HTML><!-- -- Copyright (c) 1996-1999 -- Silicon Graphics Computer Systems, Inc. -- -- Permission to use, copy, modify, distribute and sell this software -- and its documentation for any purpose is hereby granted without fee, -- provided that the above copyright notice appears in all copies and -- that both that copyright notice and this permission notice appear -- in supporting documentation. Silicon Graphics makes no -- representations about the suitability of this software for any -- purpose. It is provided "as is" without express or implied warranty. -- -- Copyright (c) 1994 -- Hewlett-Packard Company -- -- Permission to use, copy, modify, distribute and sell this software -- and its documentation for any purpose is hereby granted without fee, -- provided that the above copyright notice appears in all copies and -- that both that copyright notice and this permission notice appear -- in supporting documentation. Hewlett-Packard Company makes no -- representations about the suitability of this software for any -- purpose. It is provided "as is" without express or implied warranty. -- --><Head><Title>temporary_buffer<ForwardIterator, T></Title><!-- Generated by htmldoc --></HEAD><BODY TEXT="#000000" LINK="#006600" ALINK="#003300" VLINK="#7C7F87" BGCOLOR="#FFFFFF"><A HREF="/"><IMG SRC="/images/common/sgilogo_small.gif" ALT="SGI Logo" WIDTH="80" HEIGHT="72" BORDER="0"></A><P><!--end header--><BR Clear><H1>temporary_buffer<ForwardIterator, T></H1><Table CellPadding=0 CellSpacing=0 width=100%><TR><TD Align=left><Img src = "allocators.gif" Alt="" WIDTH = "194" HEIGHT = "38" ></TD><TD Align=right><Img src = "type.gif" Alt="" WIDTH = "194" HEIGHT = "38" ></TD></TR><TR><TD Align=left VAlign=top><b>Category</b>: allocators</TD><TD Align=right VAlign=top><b>Component type</b>: type</TD></TR></Table><h3>Description</h3>Some algorithms, such as <tt><A href="stable_sort.html">stable_sort</A></tt> and <tt><A href="inplace_merge.html">inplace_merge</A></tt>,are <i>adaptive</i>: they attempt to use extra temporary memory to storeintermediate results, and their run-time complexity is better if thatextra memory is available. These algorithms use <tt>temporary_buffer</tt>to allocate that extra memory.<P><tt>temporary_buffer</tt>'s constructor takes two arguments, <tt>first</tt> and<tt>last</tt>, of type <tt>ForwardIterator</tt>; the constructor allocatesa buffer that is large enough to contain <tt>N</tt> objects of type <tt>T</tt>,where <tt>0 <= N <= last - first</tt> <A href="#1">[1]</A>, and it fills the buffer with objects of type <tt>T</tt>. The member functions <tt>begin()</tt> and <tt>end()</tt> return iterators that point to the beginning and the endof the buffer.<P>Note that the elements in the buffer are guaranteed to be initialized; that is, <tt>begin()</tt> points to an object of type<tt>T</tt>, not to raw memory. However, the initial values ofthe buffer's elements are unspecified. You should not relyon them to be initialized to any particular value.<P><tt>temporary_buffer</tt> does not have a copy constructor, or an assignmentoperator. Those operations would have complicated, and not terriblyuseful, semantics.<P>(Earlier versions of the STL used <tt><A href="get_temporary_buffer.html">get_temporary_buffer</A></tt> and<tt><A href="return_temporary_buffer.html">return_temporary_buffer</A></tt> instead of <tt>temporary_buffer</tt>. <tt>temporary_buffer</tt> is more convenient, because it does not requireusing <tt><A href="uninitialized_copy.html">uninitialized_copy</A></tt>, and in some cases it is also moreefficient. Additionally, it is much easier to write exception-safecode with <tt>temporary_buffer</tt> than with <tt><A href="get_temporary_buffer.html">get_temporary_buffer</A></tt> and<tt><A href="return_temporary_buffer.html">return_temporary_buffer</A></tt>.)<h3>Example</h3><pre>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"));}</pre><h3>Definition</h3>Defined in the standard header <A href="memory">memory</A>, and in the nonstandardbackward-compatibility header <A href="algo.h">algo.h</A>.This class is an SGI extension; it is not part of the C++standard.<h3>Template parameters</h3><Table border><TR><TH>Parameter</TH><TH>Description</TH><TH>Default</TH></TR><TR><TD VAlign=top><tt>ForwardIterator</tt></TD><TD VAlign=top>The type of the iterators passed as arguments to <tt>temporary_buffer</tt>'s constructor.</TD><TD VAlign=top> </TD></TR><TR><TD VAlign=top><tt>T</tt></TD><TD VAlign=top>The type of object stored in the temporary buffer.</TD><TD VAlign=top><tt><A href="iterator_traits.html">iterator_traits</A><ForwardIterator>::value_type</tt> <A href="#2">[2]</A></TD></tr></table><h3>Model of</h3>None. <tt>temporary_buffer</tt> is vaguely similar to a <A href="Container.html">Container</A>, but it does not provide the entire <A href="Container.html">Container</A> interface. Inparticular, it is not a model of <A href="DefaultConstructible.html">DefaultConstructible</A> or<A href="Assignable.html">Assignable</A>.<h3>Type requirements</h3><UL><LI><tt>ForwardIterator</tt> is a model of <A href="ForwardIterator.html">Forward Iterator</A><LI><tt>ForwardIterator</tt> is mutable.<LI><tt>T</tt> has a constructor that can take a single argument of <tt>ForwardIterator</tt>'s value type.</UL><h3>Public base classes</h3>None.<h3>Members</h3><Table border><TR><TH>Member</TH><TH>Description</TH></TR><TR><TD VAlign=top><pre>temporary_buffer(ForwardIterator first, ForwardIterator last)</pre></TD><TD VAlign=top>Allocates a temporary buffer that holds at most <tt>last - first</tt> elementsof type <tt>T</tt>, and constructs those elements. The initial values ofthe elements are unspecified. Precondition: <tt>[first, last)</tt> is avalid range.</TD></TR><TR><TD VAlign=top><tt>~temporary_buffer()</tt></TD><TD VAlign=top>Destroys the elements in the temporary buffer, and deallocatesthe buffer itself.</TD></TR><TR><TD VAlign=top><tt>T* begin()</tt></TD><TD VAlign=top>Returns a pointer to the first element in the buffer.</TD></TR><TR><TD VAlign=top><tt>T* end()</tt></TD><TD VAlign=top>Returns a pointer that points one past the last elementin the buffer.</TD></TR><TR><TD VAlign=top><tt>ptrdiff_t requested_size() const</tt></TD><TD VAlign=top>Returns the value <tt>last - first</tt>, where <tt>first</tt> and <tt>last</tt> arethe arguments that were passed to the constructor.</TD></TR><TR><TD VAlign=top><tt>ptrdiff_t size() const</tt></TD><TD VAlign=top>Returns the number of elements in the temporary buffer,<tt>end() - begin()</tt>. The return value satisfies the constraint<tt>0 <= size() <= requested_size()</tt>. </TD></tr></table><h3>New members</h3><h3>Notes</h3><P><A name="1">[1]</A>The <i>requested size</i> is <tt>last - first</tt>. The size of thetemporary buffer is never larger than the requested size, but it mightwell be smaller; the size might even be zero. The intention is that<tt>temporary_buffer</tt> will allocate as large a buffer as is possiblewithout hurting performance. Note that determining this maximum sizeis quite difficult: it depends on cache size, physical versus virtualmemory, heap fragmentation, and so on. A good implementation of<tt>temporary_buffer</tt> must be nonportable.<P><A name="2">[2]</A>The <A href="iterator_traits.html">iterator_traits</A> mechanism relies on partialspecialization of templates. If your compiler does not yetimplement this features, then you will not be able to use thisdefault parameter; you will have to provide both template arguments.<h3>See also</h3><!-- start footer --><!-- Footer Begins --><STYLE TYPE="text/css"><!--TD.footer, TD.footer A{ font-family: Arial, helvetica, sans-serif; font-size: 8pt;}A.home {font-family: Arial, helvetica, sans-serif;}--></STYLE><P><A CLASS="home" HREF="index.html">STL Home</A><P><TABLE WIDTH="600" CELLPADDING="0" CELLPADDING="0" BORDER="0"> <TR> <TD ALIGN="RIGHT" CLASS="footer"><A HREF="/company_info/terms.html" TARGET="_top">terms of use</A> | <A HREF="/company_info/privacy.html" TARGET="_top">privacy policy</A></TD> <TD ALIGN="CENTER" CLASS="footer"> | </TD> <TD ALIGN="LEFT" CLASS="footer"><A HREF="/cgi-bin/feedback/" TARGET="_top">contact us</A></TD> </TR><TR> <TD ALIGN="RIGHT" CLASS="footer">Copyright © 1993-2003 Silicon Graphics, Inc. All rights reserved.</TD> <TD ALIGN="CENTER" CLASS="footer"> | </TD> <TD ALIGN="LEFT" CLASS="footer"><A HREF="/company_info/trademarks/" TARGET="_top">Trademark Information</A></TD> </TR></TABLE><!-- Footer Ends --><!-- end footer --><P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -