Aracılığıyla paylaş


uninitialized_copy

Belirtilen kaynak aralığı başlatılmamış hedef aralığın içine nesnelerinden kopyalar.

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

Parametreler

  • _First
    Kaynak aralıktaki ilk öğe adresleme giriş Yineleyici.

  • _Last
    Son öğe kaynak aralıktaki adres giriş Yineleyici.

  • _Dest
    Hedef aralığın ilk öğe adresleme ileriye doğru bir yineleyici.

Dönüş Değeri

Kaynak aralığı boş sürece hedef aralığın ötesinde birinci konuma adresleme ileriye doğru bir yineleyici ve Yineleyici adresleri _First.

Notlar

Bu algoritma bağlaşımı geri alma nesne oluşturmayı gelen bellek ayırma hizmeti verir.

Şablon işlevi etkin biçimde yürütür:

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

kod bir özel durum yaratmaz sürece. Bu durumda, oluşturulan tüm nesneler yok edilir ve durum rethrown.

uninitialized_copy iki ilişkili form sahiptir:

checked_uninitialized_copy

unchecked_uninitialized_copy

Bu işlevler nasıl davranacağını hakkında daha fazla bilgi için bkz: İşaretli Yineleyiciler.

Örnek

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

Örnek Çıktı

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.

Gereksinimler

Başlık: <memory>

Namespace: std