STL源代码分析(ch2 内存分配)uninitialized_fill_n
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相关推荐
- 全网最硬核 JVM TLAB 分析 1. 内存分配思想引入
今天,又是干货满满的一天.这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始.由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外 ...
- STL中Vector的内存分配机制
一些好的公司校园招聘过程中(包括笔试.面试环节),经常会涉及到STL中vector的使用(主要是笔试)及其性能(面试)的分析.今天看了下相关文章,也写了几个小的测试程序跑了跑.算是总结下,希望对需要的 ...
- STL源代码分析(ch2 内存分配)概述
1. 使用场景 2. 配置器定义在头文件中 //负责内存空间的配置与释放; <stl_alloc.h>//文件中定义了一.二两级配置器,彼此合作,配置器名为alloc. //负责对象内容的 ...
- STL源代码分析(ch2 内存分配)jjalloc.h
1. jjalloc.h namespace JJ{ template<class T>inline T* _allocate(ptrdiff_t size,T*){ //当operato ...
- STL源代码分析(ch2 内存分配)destroy
1. 两个版本 1.1 参数是指针 template <class T> inline void destroy(T* pointer) {pointer->~T(); // 调用析 ...
- STL源代码分析(ch 1)概述
1. 6大组件 容器(containers):各种数据结构,如vector.list.deque.set.map,用来存放数据.从实现来看,STL容器是一种 class template. 算法(al ...
- STL 源代码分析 算法 stl_algo.h -- includes
本文senlie原,转载请保留此地址:http://blog.csdn.net/zhengsenlie includes(应用于有序区间) ------------------------------ ...
- STL源代码分析(ch 1)组态2
4. __STL_MEMBER_TEMPLATES 模板类中包含模板成员,是否支持template members of classes class vec {public:typedef T val ...
- STL源代码分析(ch 1)组态1
1. __STL_STATIC_TEMPLATE_MEMBER_BUG static member of template classes(模板类静态成员) template <typename ...
最新文章
- C++零食:WTL中使用双缓冲避免闪烁
- python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...
- mysql启用组提交变量_MySQL的COMMIT_ORDER模式下组提交分组实现与BUG案例源码剖析...
- 自制vue组件通信插件:教你如何用mixin写插件
- 十大司机如厕友好城市出炉:苏州/杭州/成都位居前三
- Spring-BeanDefinitionRegistryPostProcessor接口
- 记一次使用 vue-admin-template 的优化历程
- mysql 密码sa_重置MySQL root密码
- [渝粤教育] 四川信息职业技术学院 Linux网络管理 参考 资料
- 数据结构课程设计——宿舍管理查询软件
- Ubalun电动牙刷拆卸及内部刨析
- 使用matlab计算变上限积分,matlab含有变上限积分参数的非线性回归
- Android微信小尾巴,微信朋友圈小尾巴app
- 百度知道APP心跳包分析-MD5字段(gzip + CRC32)
- 差分隐私的定义、直观理解与基本性质
- 桌面系统(web前端)jQuery制作Web桌面系统界面类似WebQQ桌面布局
- Nature 重大发现:癌基因竟不在染色体上?第一作者吴思涵亲身解读!
- R 语言多模型QQ plot
- linux vi命令操作实例,Linux下Vi替换字符命令操作实例
- 蓝色巨人——IBM公司
热门文章
- nginx:模块讲解
- one or more of the ports are invalid. Open the server editor and correct the invalid ports
- Address already in use: JVM_Bind 端口被占用解决办法
- jpa query 取数组第一个_数据结构基础-数组
- 运维不得不知道的事 数据中心断电如何做
- 计算机组网技术与配置 pdf,教案计算机组网技术.pdf
- android获取小程序音频时长,最新微信小程序获取音频时长与实时获取播放进度...
- Python之compiler:compiler库的简介、安装、使用方法之详细攻略
- DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
- hacker:Python通过对简单的WIFI弱口令实现自动实时破解