📄 transform.html
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Author" CONTENT="Zafir Anjum">
<TITLE>MFC Programmer's SourceBook : STL Programmer's Guide</TITLE>
<META name="description"
content="A freely available implementation
of the C++ Standard Template Library, including
hypertext documentation.">
<META name="keywords"
content="generic programming, STL, standard template library">
</HEAD>
<SCRIPT LANGUAGE="JavaScript"><!--
var adcategory = "cpp";
// -->
</SCRIPT>
<body background="../../fancyhome/back.gif" bgcolor="#FFFFFF" >
<SCRIPT LANGUAGE="JavaScript"><!--
var nfrm = location.href.indexOf("_nfrm_");
var validframes = (top.frames.length > 0 && top.frames['ad'] && top.frames['logo'] );
var random = Math.random();
if( !validframes && nfrm == -1 )
{
var dclkPage = "www.codeguru.com/";
if( self.adcategory )
dclkPage += adcategory;
else
dclkPage += "mfc";
document.write('<nolayer><center>');
document.write('<iframe src="http://ad.doubleclick.net/adi/' + dclkPage + ';ord='
+ random + '" width=470 height=62 marginwidth=0 marginheight=0 hspace=0 vspace=0 '
+ 'frameborder=0 scrolling=no bordercolor="#000000">');
document.write('<a href="http://ad.doubleclick.net/jump/' + dclkPage + ';ord='
+ random + '">');
document.write('<img src="http://ad.doubleclick.net/ad/' + dclkPage + ';ord='
+ random + '" height=60 width=468>' + '</a>');
document.write('</iframe>');
document.write('</center></nolayer>');
document.write('<layer src="http://ad.doubleclick.net/adl/' + dclkPage +
';ord=' + random + '"></layer>');
document.write('<ilayer visibility=hide width=468 height=83></ilayer>');
}
// top.location = "/show.cgi?" + adcategory + "=" + location.pathname;
// -->
</SCRIPT>
<noscript>
<p align="center">
<a href="http://ad.doubleclick.net/jump/www.codeguru.com/cpp;ord=Nupa59FCY34AAHgkdsI">
<img src="http://ad.doubleclick.net/ad/www.codeguru.com/cpp;ord=Nupa59FCY34AAHgkdsI"></a>
</p>
</noscript>
<BR Clear>
<H1>transform</H1>
<Table CellPadding=0 CellSpacing=0 width=100%>
<TR>
<TD Align=left><Img src = "algorithms.gif" Alt="" WIDTH = "194" HEIGHT = "38" ></TD>
<TD Align=right><Img src = "function.gif" Alt="" WIDTH = "194" HEIGHT = "38" ></TD>
</TR>
<TR>
<TD Align=left VAlign=top><b>Category</b>: algorithms</TD>
<TD Align=right VAlign=top><b>Component type</b>: function</TD>
</TR>
</Table>
<h3>Prototype</h3>
<tt>Transform</tt> is an overloaded name; there are actually two <tt>transform</tt>
functions.
<pre>
template <class <A href="InputIterator.html">InputIterator</A>, class <A href="OutputIterator.html" tppabs="http://www.sgi.com/Technology/STL/OutputIterator.shtml">OutputIterator</A>, class <A href="UnaryFunction.html" tppabs="http://www.sgi.com/Technology/STL/UnaryFunction.shtml">UnaryFunction</A>>
OutputIterator transform(InputIterator first, InputIterator last,
OutputIterator result, UnaryFunction op);
template <class <A href="InputIterator.html">InputIterator</A>1, class <A href="InputIterator.html" tppabs="http://www.sgi.com/Technology/STL/InputIterator.shtml">InputIterator</A>2, class <A href="OutputIterator.html" tppabs="http://www.sgi.com/Technology/STL/OutputIterator.shtml">OutputIterator</A>,
class <A href="BinaryFunction.html">BinaryFunction</A>>
OutputIterator transform(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, OutputIterator result,
BinaryFunction binary_op);
</pre>
<h3>Description</h3>
<tt>Transform</tt> performs an operation on objects; there are two versions
of <tt>transform</tt>, one of which uses a single range of <A href="InputIterator.html">Input Iterators</A>
and one of which uses two ranges of <A href="InputIterator.html">Input Iterators</A>.
<P>
The first version of <tt>transform</tt> performs the operation <tt>op(*i)</tt>
for each iterator <tt>i</tt> in the range <tt>[first, last)</tt>, and assigns
the result of that operation to <tt>*o</tt>, where <tt>o</tt> is the corresponding
output iterator. That is, for each <tt>n</tt> such that <tt>0 <= n < last - first</tt>,
it performs the assignment <tt>*(result + n) = op(*(first + n))</tt>.
The return value is <tt>result + (last - first)</tt>.
<P>
The second version of <tt>transform</tt> is very similar, except that it
uses a <A href="BinaryFunction.html">Binary Function</A> instead of a <A href="UnaryFunction.html" tppabs="http://www.sgi.com/Technology/STL/UnaryFunction.shtml">Unary Function</A>:
it performs the operation <tt>op(*i1, *i2)</tt> for each iterator <tt>i1</tt> in the
range <tt>[first1, last1)</tt> and assigns the result to <tt>*o</tt>, where
<tt>i2</tt> is the corresponding iterator in the second input range and
where <tt>o</tt> is the corresponding output iterator. That is,
for each <tt>n</tt> such that <tt>0 <= n < last1 - first1</tt>,
it performs the assignment <tt>*(result + n) = op(*(first1 + n), *(first2
+ n)</tt>. The return value is <tt>result + (last1 - first1)</tt>.
<P>
Note that <tt>transform</tt> may be used to modify a sequence "in place":
it is permissible for the iterators <tt>first</tt> and <tt>result</tt> to be the same. <A href="#1">[1]</A>
<h3>Definition</h3>
Defined in <A href="algo.h">algo.h</A>.
<h3>Requirements on types</h3>
For the first (unary) version:
<UL>
<LI>
<tt>InputIterator</tt> must be a model of <A href="InputIterator.html">Input Iterator</A>.
<LI>
<tt>OutputIterator</tt> must be a model of <A href="OutputIterator.html">Output Iterator</A>.
<LI>
<tt>UnaryFunction</tt> must be a model of <A href="UnaryFunction.html">Unary Function</A>.
<LI>
<tt>InputIterator</tt>'s value type must be
convertible to <tt>UnaryFunction</tt>'s argument type.
<LI>
<tt>UnaryFunction</tt>'s result type must be convertible to a type in
<tt>OutputIterator</tt>'s set of value types.
</UL>
For the second (binary) version:
<UL>
<LI>
<tt>InputIterator1</tt> and <tt>InputIterator2</tt>
must be models of <A href="InputIterator.html">Input Iterator</A>.
<LI>
<tt>OutputIterator</tt> must be a model of <A href="OutputIterator.html">Output Iterator</A>.
<LI>
<tt>BinaryFunction</tt> must be a model of <A href="BinaryFunction.html">Binary Function</A>.
<LI>
<tt>InputIterator1</tt>'s and <tt>InputIterator2</tt>'s value types must
be convertible, respectively, to <tt>BinaryFunction</tt>'s first and second
argument types.
<LI>
<tt>UnaryFunction</tt>'s result type must be convertible
to a type in <tt>OutputIterator</tt>'s set of value types.
</UL>
<h3>Preconditions</h3>
For the first (unary) version:
<UL>
<LI>
<tt>[first, last)</tt> is a valid range.
<LI>
<tt>result</tt> is not an iterator within the range <tt>[first+1, last)</tt>. <A href="#1">[1]</A>
<LI>
There is enough space to hold all of the elements being copied.
More formally, the requirement is that
<tt>[result, result + (last - first))</tt> is a valid range.
</UL>
For the second (binary) version:
<UL>
<LI>
<tt>[first1, last1)</tt> is a valid range.
<LI>
<tt>[first2, first2 + (last1 - first1))</tt> is a valid range.
<LI>
<tt>result</tt> is not an iterator within the range <tt>[first1+1, last1)</tt>
or <tt>[first2 + 1, first2 + (last1 - first1))</tt>.
<LI>
There is enough space to hold all of the elements being copied.
More formally, the requirement is that
<tt>[result, result + (last1 - first1))</tt> is a valid range.
</UL>
<h3>Complexity</h3>
Linear. The operation is applied exactly <tt>last - first</tt> times
in the case of the unary version, or <tt>last1 - first1</tt> in the case
of the binary version.
<h3>Example</h3>
Replace every number in an array with its negative.
<pre>
const int N = 1000;
double A[N];
<A href="iota.html">iota</A>(A, A+N, 1);
transform(A, A+N, A, <A href="negate.html">negate</A><double>());
</pre>
<P>
Calculate the sum of two vectors, storing the result in a third vector.
<pre>
const int N = 1000;
<A href="Vector.html">vector</A><int> V1(N);
<A href="Vector.html">vector</A><int> V2(N);
<A href="Vector.html">vector</A><int> V3(N);
<A href="iota.html">iota</A>(V1.begin(), V1.end(), 1);
<A href="fill.html">fill</A>(V2.begin(), V2.end(), 75);
assert(V2.size() >= V1.size() && V3.size() >= V1.size());
transform(V1.begin(), V1.end(), V2.begin(), V3.begin(),
<A href="plus.html">plus</A><int>());
</pre>
<h3>Notes</h3>
<P><A name="1">[1]</A>
The <A href="OutputIterator.html">Output Iterator</A> <tt>result</tt> is not permitted to be the same as
any of the <A href="InputIterator.html">Input Iterators</A> in the range <tt>[first, last)</tt>, with the
exception of <tt>first</tt> itself. That is:
<tt>transform(V.begin(), V.end(), V.begin(), fabs)</tt> is valid, but
<tt>transform(V.begin(), V.end(), V.begin() + 1, fabs)</tt> is not.
<h3>See also</h3>
The <A href="functors.html">function object overview</A>, <tt><A href="copy.html" tppabs="http://www.sgi.com/Technology/STL/copy.shtml">copy</A></tt>, <tt><A href="generate.html" tppabs="http://www.sgi.com/Technology/STL/generate.shtml">generate</A></tt>,
<tt><A href="fill.html">fill</A></tt>
<HR SIZE="6"> <FONT SIZE="-2"> Copyright © 1996 Silicon Graphics, Inc.
<HR>
<TABLE BORDER=0 WIDTH="100%" >
<TR>
<TD WIDTH="33%"><FONT SIZE=-1><A HREF="index.html" >
STL</A></FONT></TD>
<TD WIDTH="33%">
<CENTER><FONT SIZE=-2>© Copyright 1997-1998 CodeGuru</FONT> </CENTER>
</TD>
<TD WIDTH="34%">
<DIV ALIGN=right><FONT SIZE=-1>Contact : <A HREF="mailto:webmaster@codeguru.com">webmaster@codeguru.com</A> </FONT></DIV>
</TD>
</TR>
</TABLE>
<SCRIPT LANGUAGE="JavaScript" ><!--
var adurl = "/cgi-bin/doubleclick.cgi?";
if( self.adcategory )
adurl += adcategory;
else
adurl += "mfc";
if( self.parent.norefreshad )
parent.norefreshad = false;
else if( validframes )
parent.frames['ad'].location = adurl;
if( !validframes && nfrm == -1)
{
var dclkPage = "www.codeguru.com/";
if( self.adcategory )
dclkPage += adcategory;
else
dclkPage += "mfc";
// var random = Math.random();
document.write('<nolayer><center>');
document.write('<iframe src="http://ad.doubleclick.net/adi/' + dclkPage + ';ord='
+ random + '" width=470 height=62 marginwidth=0 marginheight=0 hspace=0 vspace=0 '
+ 'frameborder=0 scrolling=no bordercolor="#000000">');
document.write('<a href="http://ad.doubleclick.net/jump/' + dclkPage + ';ord='
+ random + '">');
document.write('<img src="http://ad.doubleclick.net/ad/' + dclkPage + ';ord='
+ random + '" height=60 width=468>' + '</a>');
document.write('</iframe>');
document.write('</center></nolayer>');
document.write('<layer src="http://ad.doubleclick.net/adl/' + dclkPage +
';ord=' + random + '"></layer>');
document.write('<ilayer visibility=hide width=468 height=83></ilayer>');
}
// -->
</SCRIPT>
<!-- SCRIPT LANGUAGE="JavaScript" SRC="/global/fscript.js">
//
</SCRIPT -->
<noscript>
<p align="center">
<a href="http://ad.doubleclick.net/jump/www.codeguru.com/cpp;ord=Nupa59FCY34AAHgkdsI">
<img src="http://ad.doubleclick.net/ad/www.codeguru.com/cpp;ord=Nupa59FCY34AAHgkdsI"></a>
</p>
</noscript>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -