Sdílet prostřednictvím


uninitialized_copy

Kopie objektů z určené zdrojové oblasti do oblasti určení neinicializované.

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

Parametry

  • _First
    Vstupní iterační adresování první prvek ve zdrojové oblasti.

  • _Last
    Vstupní iterační adresování poslední prvek ve zdrojové oblasti.

  • _Dest
    Vpřed iterační adresování první prvek v cílové oblasti.

Vrácená hodnota

Vpřed iterační adresování první pozice mimo oblast určení, pokud zdrojová oblast byla prázdná a iterace adresy _First.

Poznámky

Tento algoritmus umožňuje oddělení přidělení paměti z konstrukce objektu.

Účinně vykonává funkce šablony:

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

Pokud kód vyvolá výjimku.V takovém případě jsou zničeny všechny objekty vyrobeno a je výjimka rethrown.

uninitialized_copy má dva související formuláře:

checked_uninitialized_copy

unchecked_uninitialized_copy

Další informace o chování těchto funkcí naleznete v tématu Zaškrtnuté iterátory.

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

Příklad výstupu

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

Záhlaví: <memory>

Obor názvů: std