Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kopienobjekte aus einem angegebenen Quellbereich in einen nicht initialisierten Zielbereich.
template<class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_copy(
InputIterator _First,
InputIterator _Last,
ForwardIterator _Dest
);
Parameter
_First
Ein Eingabeiterator, der das erste Element im Quellbereich behandelt._Last
Ein Eingabeiterator, der das letzte Element im Quellbereich behandelt._Dest
Ein Vorwärtsiterator, der das erste Element im Zielbereich behandelt.
Rückgabewert
Ein Vorwärtsiterator, der die erste Position über den Zielbereich hinaus adressiert, es sei denn, der Quellbereich war leer und Iterator adressiert _First.
Hinweise
Dieser Algorithmus ermöglicht die Entkopplung der Speicherbelegung von der Objekterstellung.
Die Vorlagenfunktion führt für aus:
while ( _First!= _Last )
new ( ( void * )&*_Dest ++)
iterator_traits<InputIterator>::value_type ( *_First ++ );
return _First;
es sei denn, der Code eine Ausnahme auslöst.In diesem Fall werden alle erstellten Objekte zerstört und die Ausnahme wird erneut ausgelöst.
uninitialized_copy hat zwei verknüpfte Formulare:
Weitere Informationen darüber, wie diese Funktionen verhalten, finden Sie unter Überprüfte Iteratoren.
Beispiel
// memory_uninit_copy.cpp
// compile with: /EHsc /W3
#include <memory>
#include <iostream>
using namespace std;
class Integer
{
public:
Integer( int x ) : val( x ) {}
int get( ) { return val; }
private:
int val;
};
int main( )
{
int Array[] = { 10, 20, 30, 40 };
const int N = sizeof( Array ) / sizeof( int );
int i;
cout << "The initialized Array contains " << N << " elements: ";
for (i = 0 ; i < N; i++ )
{
cout << " " << Array [ i ];
}
cout << endl;
Integer* ArrayPtr = ( Integer* ) malloc( N * sizeof( int ) );
Integer* LArrayPtr = uninitialized_copy(
Array, Array + N, ArrayPtr); // C4996
cout << "Address of position after the last element in the array is: "
<< &Array[0] + N << endl;
cout << "The iterator returned by uninitialized_copy addresses: "
<< ( void* )LArrayPtr << endl;
cout << "The address just beyond the last copied element is: "
<< ( void* )( ArrayPtr + N ) << endl;
if ( ( &Array[0] + N ) == ( void* )LArrayPtr )
cout << "The return value is an iterator "
<< "pointing just beyond the original array." << endl;
else
cout << "The return value is an iterator "
<< "not pointing just beyond the original array." << endl;
if ( ( void* )LArrayPtr == ( void* )( ArrayPtr + N ) )
cout << "The return value is an iterator "
<< "pointing just beyond the copied array." << endl;
else
cout << "The return value is an iterator "
<< "not pointing just beyond the copied array." << endl;
free ( ArrayPtr );
cout << "Note that the exact addresses returned will vary\n"
<< "with the memory allocation in individual computers."
<< endl;
}
Beispiels-Ausgabe
The initialized Array contains 4 elements: 10 20 30 40
Address of position after the last element in the array is: 0012FED8
The iterator returned by uninitialized_copy addresses: 00311B88
The address just beyond the last copied element is: 00311B88
The return value is an iterator not pointing just beyond the original array.
The return value is an iterator pointing just beyond the copied array.
Note that the exact addresses returned will vary
with the memory allocation in individual computers.
Anforderungen
Header: <memory>
Namespace: std