std函数:fill和fill_n


  • 1 前言
  • 2 fill函数
  • 3 fill_n函数


1 前言


  有时候,我们可能需要对某一块数据进行初始化,比如说,把一个int a[10] 元素初始化为-1,最简单的做法就是使用一个for循环:

for(int i=0;i<10;i++){a[i] = -1;
}

  但这个方式,太单调简陋了,能做的不多,扩展性为零,而且写个for循环逐一赋值,似乎也不够高明。
  std库提供了更好的方法来“填充数据”,简单学习一下。

2 fill函数

函数原型

  fill函数在头文件 中声明:

template< class ForwardIt, class T >
void fill( ForwardIt first, ForwardIt last, const T& value );

函数参数

函数参数解释说明
first,last所需要修改元素的范围
value所需要修改的值


  ForwardIt 是一种迭代器,支持的数据类型包括数组、vector等。此外,对于超出范围的输入,是一种未定义的操作,结果视编译器而异。

函数实现

template< class ForwardIt, class T >
void fill(ForwardIt first, ForwardIt last, const T& value)
{for (; first != last; ++first) {*first = value;}
}


程序示例

/*
* @Author:Jason.Lee
* @Date: 2018-7-3 
*/ #include
#include
#includeusing namespace std;int main(){int a[10];fill(a,a+10,6);copy(a,a+10,ostream_iterator<int>(cout," "));return 0;
}

程序结果
fill函数

3 fill_n函数


  fill_n函数与fill在功能上并没有太大不同,应用场景有所不同,fill是将整块数据“从头到尾”进行赋值,而fill_n是将数据的n个元素进行赋值,两者其实都能实现相同的效果。

函数原型

  fill_n函数在头文件 中声明:

template< class OutputIt, class Size, class T >
void fill_n( OutputIt first, Size count, const T& value );

函数参数

函数参数解释说明
fitst所需要修改的数据块起始地址
count所需要修改的个数
value所需要修改的值

函数实现

template<class OutputIt, class Size, class T>
OutputIt fill_n(OutputIt first, Size count, const T& value)
{for (Size i = 0; i < count; i++) {*first++ = value;}
    return first;
}


程序示例

/*
* @Author:Jason.Lee
* @Date: 2018-7-3 
*/ #include
#include
#includeusing namespace std;int main(){vector<int> v = {1,2,3,4,5,6,7,8,9};fill_n(v.begin(),5,1);std::copy(v.begin(),v.end(),std::ostream_iterator<int>(cout," "));
}

程序结果
fill_n函数

更多用法

  fill_n函数只限定了输入的起始地址,对于其他的一些std函数而言,是一种便利,比如和back_inserter 函数的结合

/*
* @Author:Jason.Lee
* @Date: 2018-7-3 
*/ 
#include
#include
#includeint main(){vector<int> v;fill_n(back_inserter(v),10,1);std::copy(v.begin(),v.end(),std::ostream_iterator<int>(cout," "));
}

程序结果
fill_n函数

  back_inserter 函数是一种增量迭代插入的方式,这种方法可以动态的填装数据,避免了容量不足的情况。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部