STL源码分析之uninitialized系列函数

本文深入分析了STL中的uninitialized_copy、uninitialized_copy_n、uninitialized_fill和uninitialized_fill_n函数,详细解释了它们的功能、内部实现及优化处理,特别是针对不同类型的数据如何进行高效构造和复制。
摘要由CSDN通过智能技术生成

前言

这里将内存处理工具放到这里来讲是因为必须对__type_traits类型定义有所了解, 对traits编程有所了解才行.(如果你还没有了解这些, 希望能去看一下前面4篇的文章). 而且容器实现的很多地方都会用到uninitialized_copy的函数, 虽然乍一看功能应该是执行复制操作, 但如果第一次看或者事先没有理解该函数怎么工作的可能会影响到部分人分析代码的效率, 所以在这里就提前对其进行分析.

uninitialized_copy函数

uninitialized_copy功能 : 从first到last范围内的元素复制到从 result地址开始的内存.

template <class InputIterator, class ForwardIterator>
inline ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
                     ForwardIterator result) {
   
  return __uninitialized_copy(first, last, result, value_type(result));
}

很明显这就只是调用另一个函数的接口而已.

uninitialized_copy类似于第一篇分析空间配置器的destory针对const char*const wchar*单独做了特例化.

inline char* uninitialized_copy(const char* first, const char* last,
                                char* result) {
   
  memmove(result, first, last - first);
  return result + (last - first);
}

inline wchar_t* uninitialized_copy(const wchar_t* first, const wchar_t* last,
                                   wchar_t* result) {
   
  memmove(result, first, sizeof(wchar_t) * (last - first));
  return result + (last - first);
}

直接调用c++的memmove操作, 毕竟这样的效率更加的高效.

__uninitialized_copy函数
template <class InputIterator, class ForwardIterator, class T>
inline ForwardIterator __uninitialized_copy(InputIterator first, InputIterator last,
                     ForwardIterator result, T*) {
   
  typedef typename __type_traits
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值