STL的copy真是是做的了极致的效率
2015-11-30 21:00
585 查看
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
相关文章推荐
- Hadoop-MapReduce初步应用-统计单词个数
- Linux kgdb命令
- 在中间件维护的时候应该注意tns的地方 -------运维日志7
- centos下mysql主从搭建总结
- MFC+Opencv在单文档程序中显示出一幅图像
- 内核阅读之浅析Linux2.6.34内核路由数据转发(一)
- MFC+Opencv在对话框程序中显示出一幅图像
- ARM64从源码编译docker(v1.9.1)
- C library function - freopen()
- tomcat热启动
- Docker:使用pipework配置docker网络
- Apache Mesos 官方文档 V1.0
- linux_根据关键词_路径下递归查找code
- 动态代理实现AOP【转】
- MVC随笔之基础数据维护(MVC4+Boostrap)
- Linux 注销 登录 重启
- Device eth0 does not seem to be present, delaying initialization(解决克隆CentOS6.3虚拟机后网卡设备无法启动问题)
- FIFO,LRU,OPT置换算法
- arm-linux内核编译过程小结
- OpenCV访问图像数据并设定灰度值