1. 程式人生 > >C++ STL庫—— 基礎泛型演算法copy

C++ STL庫—— 基礎泛型演算法copy

copy

  函式原型:

template<class _InIt,
	class _OutIt> inline
	_OutIt copy(_InIt _First, _InIt _Last,
		_OutIt _Dest)
	{	// copy [_First, _Last) to [_Dest, ...)
	_DEPRECATE_UNCHECKED(copy, _Dest);//安全控制
	return (_Copy_no_deprecate(_First, _Last, _Dest));
	}

    是將待拷貝的容器,從_First  ,  _Last這個範圍中的資料拷貝到目標容器的起始位置 _Dest。

  函式實現:

//函式2
_Copy_no_deprecate(_First, _Last, _Dest)


template<class _InIt,
	class _OutIt> inline
	_OutIt _Copy_no_deprecate(_InIt _First, _InIt _Last,
		_OutIt _Dest)
	{	// copy [_First, _Last) to [_Dest, ...), no _SCL_INSECURE_DEPRECATE_FN warnings
	_DEBUG_RANGE(_First, _Last);
	const auto _UFirst = _Unchecked(_First);
	const auto _ULast = _Unchecked(_Last);
	const auto _UDest = _Unchecked_n(_Dest, _Idl_distance<_InIt>(_UFirst, _ULast));
	return (_Rechecked(_Dest,
		_Copy_unchecked(_UFirst, _ULast, _UDest)));
	}
//函式3
_Unchecked()
template<class _Iter>
	constexpr _Iter _Unchecked(_Iter _Src)
	{	// construct unchecked from checked, generic
	return (_Src);
	}
//函式4:
_OutIt _Copy_unchecked1(_InIt _First, _InIt _Last,_OutIt _Dest, _General_ptr_iterator_tag)
//最主要的實現方式
template<class _InIt,
	class _OutIt> inline
	_OutIt _Copy_unchecked1(_InIt _First, _InIt _Last,
		_OutIt _Dest, _General_ptr_iterator_tag)
	{	// copy [_First, _Last) to [_Dest, ...), arbitrary iterators
	for (; _First != _Last; ++_Dest, (void)++_First)
		*_Dest = *_First;
	return (_Dest);
	}

  函式作用:主要用於不同容器之間的元素拷貝。

  函式用法

①:

​copy<vc.begin(),vc.end(),vc1.push_back());​
//將容器vc,從頭到位,採用尾插發拷貝到vc1中。

②:

copy(vc.begin(),vc.end(),ostream_iterator(cout , " "));

//將vc中的內容,拷貝到輸出迭代器中。