uninitialized_fill与fill的区别

来源:互联网 发布:linux新加硬盘不显示 编辑:程序博客网 时间:2024/04/30 06:25

 uninitialized_fill与fill的区别

在STL源码中可以经常看到uninitialized_fill与fill函数.刚开始不明白到底什么时候
用uninitialized_fill还是fill函数.后来模仿写STL源码时,才明白了,这样做一个简单的说明
希望对初学者有所帮助.

先看看两个函数功能:

1.fill是直接对每个元素进行填充value.

2.uninitialized_fill(未初始化填充) 是要根据value的类型来判断使用哪一种方式填充,

如果是POD类型(就是内置类型或普通结构与类(没有指针的成员数据)),就直接调用fill函数.

不是POD类型时,就要遍历每个元素进行构造(调用construct函数).为什么呢?

那是因为*first = value; 类的赋值操作符必须要*first的对象已经生成.

uninitialized_fill一般都是用于未初化填充,也就是说内存区间根本没有对象可言.

此外相关的还有两个: uninitialized_fill_n, uninitialized_copy.原理一样

uninitialized_fill与fill的源码:(模仿sgi stl)


这是vector中reserve函数