C++ STL庫—— 基礎泛型演算法copy
阿新 • • 發佈:2018-12-19
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中的內容,拷貝到輸出迭代器中。