STL的copy真是是做的了极致的效率

inline char*  unitialized_copy(const char* first, const char* last, char* result){
		std::memmove(result, first, last - first);
		return result + (last - first);
	}
	inline wchar_t* unitialized_copy(const wchar_t* first, const wchar_t* last, wchar_t* result){
		std::memmove(result, first, sizeof(wchar_t)*(last - first));
		return result + (last - first);
	}
	template<class Input_iterator,class Forward_iterator>
	inline Forward_iterator __uninitialized_copy_aux(Input_iterator first, Input_iterator last, Forward_iterator result, __false_type){
		for (; first != last; ++first, ++result){
			construct(&*result,*first);
			return result;
		}
	}
	template<class T>
	T* __copy_t(const T* first,const T* last, T* result, __true_type){
		std::memmove(result, first, sizeof(T)*(last - first));
		return result +(last - first);
	}

	template<class T>
	T* __copy_t(const T* first, const T* last, T* result, __false_type){
		return __copy_d(first, last, result, result, ptrdiff_t*(0));
	}

	template<class Random_iterator, class Output_iterator, class Different>
	Output_iterator __copy_d(Random_iterator first, Random_iterator last, Output_iterator result, Different*){
		Different n = last - first;
		for (; n > 0; --n, ++first, ++result){
			*result = *first;
		}
		return result;
	}
	
	template<class Input_iterator,class Output_iterator>
	Output_iterator __copy(Input_iterator first, Input_iterator last, Output_iterator result,__input_iterator_tag){
		while (first != last){
			*result = *first;
			++result;
			++first;
		}
		return result;
	}
	template<class Random_iterator,class Output_iterator>
	Output_iterator __copy(Random_iterator first, Random_iterator last, Output_iterator result, __random_access_iterator_tag){
		return __copy_d(first, last, result, different_type(first));
	}
	
	template<class Input_iterator,class Output_iterator>
	struct __copy_dispatch{
		Output_iterator operator()(Input_iterator first, Input_iterator last, Output_iterator result){
			return __copy(first, last, result, iterator_catagory(result));
		}
	};

	template<class T>
	struct __copy_dispatch<const T*, T*>{
		T* operator()(const T* first, const T* last, T* result){
			typedef typename __iterator_traits<T>::has_trival_assignment_operator has_trival_assignment_operator;
			return __copy_t(first, last, result, has_trival_assignment_operator());
		}
	};
	template<class T>
	struct __copy_dispatch<T*, T*>{
		T* operator()(T* first, T* last, T* result){
			typedef typename __iterator_traits<T>::has_trival_assignment_operator has_trival_assignment_operator;
			return __copy_t(first, last, result, has_trival_assignment_operator());
		}
	};
	

	
	template<class Input_iterator,class Output_iterator>
	inline Output_iterator copy__t(Input_iterator first, Input_iterator last, Output_iterator result){
		return __copy_dispatch<Input_iterator, Output_iterator>()(first, last, result);
	}
	
	template<class Input_iterator,class Forward_iterator>
	inline Forward_iterator __uninitialized__copy_aux(Input_iterator first, Input_iterator last, Forward_iterator result, __true_type){
		return copy__t(first, last, result);
	}

	template<class Input_iterator,class Forward_iterator,class T>
	inline Forward_iterator __uninitialized_copy(Input_iterator first, Input_iterator last, Forward_iterator result, T*){
		typedef typename __iterator_traits<T>::is_pod_type is_pod_type;
		return __uninitialized__copy_aux(first, last, result, is_pod_type());
	}
	template<class Input_iterator,class Forward_iterator>
	inline Forward_iterator uninitialized_copy_x(Input_iterator first, Input_iterator last, Forward_iterator result){
		return __uninitialized_copy(first, last, result, value_type(result));
	}


太美了


第一次是pod类型 dispatch

第二次assign dispatch

第三次是catagory

实在是不能在提高效率了 

 

最高的利用类型的特性    

gggggggood

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值