transform
Belirtilen işlev nesnenin kaynak aralıktaki her öğe veya öğeleri çiftinin iki kaynak aralıklardaki uygular ve işlev nesnenin dönüş değerleri hedef aralığına kopyalar.
template<class InputIterator, class OutputIterator, class UnaryFunction>
OutputIterator transform(
InputIterator _First1,
InputIterator _Last1,
OutputIterator _Result,
UnaryFunction _Func
);
template<class InputIterator1, class InputIterator2, class OutputIterator,
class BinaryFunction>
OutputIterator transform(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2,
OutputIterator _Result,
BinaryFunction _Func
);
Parametreler
_First1
İlk kaynak aralığındaki üzerinde işletilen ilk öğenin konumunu adresleme giriş Yineleyici._Last1
Giriş Yineleyici konumu ilk kaynak aralığındaki son öğe geçmiş adresleme üzerinde çalışırdı._First2
İkinci kaynak aralığındaki üzerinde işletilen ilk öğenin konumunu adresleme giriş Yineleyici._Result
Hedef aralıkta ilk öğenin konumunu adresleme çıktı Yineleyici._Func
İlk kaynak aralığındaki her öğeye uygulanan algoritması ilk sürümünde kullanılan tekli kullanıcı tanımlı işlev veya ikili, iki kaynak aralığı için bir ileriye doğru sırayla uygulanan algoritma ikinci sürümü kullanılan bir kullanıcı tanımlı (ud) ikili işlevi nesne.
Dönüş Değeri
Çıkış Yineleyici position işlevi nesnesi tarafından dönüştürülmüş çıktı öğeleri alma hedef aralıktaki son öğe geçmiş adresleme.
Notlar
Başvurduğu aralıkların geçerli olması gerekir; Tüm işaretçiler dereferenceable ve her sıra içinde son konuma birinciden erişilebilmelidir tarafından incrementation. Hedef aralık dönüştürülmüş kaynak aralığını içerecek büyüklükte olmalıdır.
_Result Eşit olacak şekilde ayarlayın _First1 algoritması ilk sürümünde*,* kaynak ve hedef aralıkların aynı olacaktır ve sıra yerde değiştirilecek. Ancak _Result aralığı içinde bir konuma yönelik olmayabilecekleri [_First1 + 1, _Last1).
Karmaşıklığını en fazla olan doğrusal (_Last1 – _First1) karşılaştırmaları.
Örnek
// alg_transform.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
// The function object multiplies an element by a Factor
template <class Type>
class MultValue
{
private:
Type Factor; // The value to multiply by
public:
// Constructor initializes the value to multiply by
MultValue ( const Type& _Val ) : Factor ( _Val ) {
}
// The function call for the element to be multiplied
Type operator ( ) ( Type& elem ) const
{
return elem * Factor;
}
};
int main( )
{
using namespace std;
vector <int> v1, v2 ( 7 ), v3 ( 7 );
vector <int>::iterator Iter1, Iter2 , Iter3;
// Constructing vector v1
int i;
for ( i = -4 ; i <= 2 ; i++ )
{
v1.push_back( i );
}
cout << "Original vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Modifying the vector v1 in place
transform (v1.begin ( ) , v1.end ( ) , v1.begin ( ) , MultValue<int> ( 2 ) );
cout << "The elements of the vector v1 multiplied by 2 in place gives:"
<< "\n v1mod = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Using transform to multiply each element by a factor of 5
transform ( v1.begin ( ) , v1.end ( ) , v2.begin ( ) , MultValue<int> ( 5 ) );
cout << "Multiplying the elements of the vector v1mod\n "
<< "by the factor 5 & copying to v2 gives:\n v2 = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")." << endl;
// The second version of transform used to multiply the
// elements of the vectors v1mod & v2 pairwise
transform ( v1.begin ( ) , v1.end ( ) , v2.begin ( ) , v3.begin ( ) ,
multiplies <int> ( ) );
cout << "Multiplying elements of the vectors v1mod and v2 pairwise "
<< "gives:\n v3 = ( " ;
for ( Iter3 = v3.begin( ) ; Iter3 != v3.end( ) ; Iter3++ )
cout << *Iter3 << " ";
cout << ")." << endl;
}
Gereksinimler
Başlık: <algorithm>
Namespace: std