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);//有可能是跨平台处理;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中的内容,拷贝到输出迭代器中。

猜你喜欢

转载自blog.csdn.net/genzld/article/details/83686490