1. uninitialized_fill_n(ForwardIter first, Size n, const T& value)

从 first 位置开始,填充 n 个元素值,返回填充结束的位置

template <class ForwardIter, class Size, class T>
ForwardIter uninitialized_fill_n(ForwardIter first, Size n, const T& value)
{return mystl::unchecked_uninit_fill_n(first, n, value, std::is_trivially_copy_assignable<typename iterator_traits<ForwardIter>::value_type>{});
}

->

template <class ForwardIter, class Size, class T>
ForwardIter
unchecked_uninit_fill_n(ForwardIter first, Size n, const T& value, std::true_type)
{return mystl::fill_n(first, n, value);
}template <class ForwardIter, class Size, class T>
ForwardIter
unchecked_uninit_fill_n(ForwardIter first, Size n, const T& value, std::false_type)
{auto cur = first;try{for (; n > 0; --n, ++cur){mystl::construct(&*cur, value);}}catch (...){for (; first != cur; ++first)mystl::destroy(&*first);}return cur;
}

1.1 fill_n

// 从 first 位置开始填充 n 个值
template <class OutputIter, class Size, class T>
OutputIter fill_n(OutputIter first, Size n, const T& value)
{return unchecked_fill_n(first, n, value);
}

->

template <class OutputIter, class Size, class T>
OutputIter unchecked_fill_n(OutputIter first, Size n, const T& value)
{for (; n > 0; --n, ++first){*first = value;}return first;
}// 为 one-byte 类型提供特化版本
template <class Tp, class Size, class Up>
typename std::enable_if<std::is_integral<Tp>::value && sizeof(Tp) == 1 &&!std::is_same<Tp, bool>::value &&std::is_integral<Up>::value && sizeof(Up) == 1,Tp*>::type
unchecked_fill_n(Tp* first, Size n, Up value)
{if (n > 0){std::memset(first, (unsigned char)value, (size_t)(n));}return first + n;
}

STL源代码分析(ch2 内存分配)uninitialized_fill_n相关推荐

  1. 全网最硬核 JVM TLAB 分析 1. 内存分配思想引入

    今天,又是干货满满的一天.这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始.由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外 ...

  2. STL中Vector的内存分配机制

    一些好的公司校园招聘过程中(包括笔试.面试环节),经常会涉及到STL中vector的使用(主要是笔试)及其性能(面试)的分析.今天看了下相关文章,也写了几个小的测试程序跑了跑.算是总结下,希望对需要的 ...

  3. STL源代码分析(ch2 内存分配)概述

    1. 使用场景 2. 配置器定义在头文件中 //负责内存空间的配置与释放; <stl_alloc.h>//文件中定义了一.二两级配置器,彼此合作,配置器名为alloc. //负责对象内容的 ...

  4. STL源代码分析(ch2 内存分配)jjalloc.h

    1. jjalloc.h namespace JJ{ template<class T>inline T* _allocate(ptrdiff_t size,T*){ //当operato ...

  5. STL源代码分析(ch2 内存分配)destroy

    1. 两个版本 1.1 参数是指针 template <class T> inline void destroy(T* pointer) {pointer->~T(); // 调用析 ...

  6. STL源代码分析(ch 1)概述

    1. 6大组件 容器(containers):各种数据结构,如vector.list.deque.set.map,用来存放数据.从实现来看,STL容器是一种 class template. 算法(al ...

  7. STL 源代码分析 算法 stl_algo.h -- includes

    本文senlie原,转载请保留此地址:http://blog.csdn.net/zhengsenlie includes(应用于有序区间) ------------------------------ ...

  8. STL源代码分析(ch 1)组态2

    4. __STL_MEMBER_TEMPLATES 模板类中包含模板成员,是否支持template members of classes class vec {public:typedef T val ...

  9. STL源代码分析(ch 1)组态1

    1. __STL_STATIC_TEMPLATE_MEMBER_BUG static member of template classes(模板类静态成员) template <typename ...

最新文章

  1. C++零食:WTL中使用双缓冲避免闪烁
  2. python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...
  3. mysql启用组提交变量_MySQL的COMMIT_ORDER模式下组提交分组实现与BUG案例源码剖析...
  4. 自制vue组件通信插件:教你如何用mixin写插件
  5. 十大司机如厕友好城市出炉:苏州/杭州/成都位居前三
  6. Spring-BeanDefinitionRegistryPostProcessor接口
  7. 记一次使用 vue-admin-template 的优化历程
  8. mysql 密码sa_重置MySQL root密码
  9. [渝粤教育] 四川信息职业技术学院 Linux网络管理 参考 资料
  10. 数据结构课程设计——宿舍管理查询软件
  11. Ubalun电动牙刷拆卸及内部刨析
  12. 使用matlab计算变上限积分,matlab含有变上限积分参数的非线性回归
  13. Android微信小尾巴,微信朋友圈小尾巴app
  14. 百度知道APP心跳包分析-MD5字段(gzip + CRC32)
  15. 差分隐私的定义、直观理解与基本性质
  16. 桌面系统(web前端)jQuery制作Web桌面系统界面类似WebQQ桌面布局
  17. Nature 重大发现:癌基因竟不在染色体上?第一作者吴思涵亲身解读!
  18. R 语言多模型QQ plot
  19. linux vi命令操作实例,Linux下Vi替换字符命令操作实例
  20. 蓝色巨人——IBM公司

热门文章

  1. nginx:模块讲解
  2. one or more of the ports are invalid. Open the server editor and correct the invalid ports
  3. Address already in use: JVM_Bind 端口被占用解决办法
  4. jpa query 取数组第一个_数据结构基础-数组
  5. 运维不得不知道的事 数据中心断电如何做
  6. 计算机组网技术与配置 pdf,教案计算机组网技术.pdf
  7. android获取小程序音频时长,最新微信小程序获取音频时长与实时获取播放进度...
  8. Python之compiler:compiler库的简介、安装、使用方法之详细攻略
  9. DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
  10. hacker:Python通过对简单的WIFI弱口令实现自动实时破解