Sdílet prostřednictvím


uninitialized_copy

Zkopíruje objekty ze zadaného zdrojového rozsahu do neinicializovaného cílového rozsahu.

template<class InputIterator, class ForwardIterator> 
   ForwardIterator uninitialized_copy( 
      InputIterator _First,  
      InputIterator _Last, 
      ForwardIterator _Dest 
   );

Parametry

  • _First
    Vstupní iterátor adresující první prvek ve zdrojovém rozsahu.

  • _Last
    Vstupní iterátor adresující poslední prvek ve zdrojovém rozsahu.

  • _Dest
    Dopředný iterátor, který adresuje první prvek v cílovém rozsahu.

Vrácená hodnota

Dopředný iterátor adresující první pozici za cílovým rozsahem, pokud zdrojový rozsah nebyl prázdný a iterátor neadresuje _First.

Poznámky

Tento algoritmus umožňuje zrušení spinové interakce přidělení paměti z konstrukce objektu.

Funkce šablony efektivně provede:

while ( _First!= _Last )
   new ( ( void * )&*_Dest ++)
      iterator_traits<InputIterator>::value_type ( *_First ++ );
return _First;

pokud kód nevyvolá výjimku.V takovém případě jsou všechny vytvořené objekty zničeny a znovu se vyvolá výjimka.

Příklad

// 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;
}

Výstup příkladu

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.

Požadavky

Hlavička: <memory>

Obor názvů: std