copy
函数原型:
template<class _InIt,
class _OutIt> inline
_OutIt copy(_InIt _First, _InIt _Last,
_OutIt _Dest)
{ // copy [_First, _Last) to [_Dest, ...)
_DEPRECATE_UNCHECKED(copy, _Dest);//有可能是跨平台处理;STL没有多线程安全控制
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中的内容,拷贝到输出迭代器中。