uninitialized_copy
從指定的來源範圍的物件複製至未初始化的目的範圍中。
template<class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_copy(
InputIterator _First,
InputIterator _Last,
ForwardIterator _Dest
);
參數
_First
處理輸入的 Iterator 指向來源範圍中第一個項目。_Last
處理輸入的 Iterator 指向來源範圍中的最後一個項目。_Dest
處理順向的 Iterator 在目的範圍的第一個項目。
傳回值
處理順向的 Iterator 在目的範圍的第一個位置,則為,除非來源範圍是空白和 Iterator 位址 _First。
備註
這個演算法允許分開來建構物件的記憶體配置。
樣板函式有效地執行:
while ( _First!= _Last )
new ( ( void * )&*_Dest ++)
iterator_traits<InputIterator>::value_type ( *_First ++ );
return _First;
除非程式碼便會擲回例外狀況。 在這種情況下,終結所有建構的物件,並將重新擲回例外狀況。
uninitialized_copy 有兩個關聯的表單:
如需這些功能的運作方式的詳細資訊的行為,請參閱 檢查過的 Iterator。
範例
// 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;
}
範例輸出。
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.
需求
標題: <memory>
命名空間: std