C++ STL(12):填充区间

29 篇文章 0 订阅
29 篇文章 1 订阅
#include <iostream>
#include <algorithm>
#include <iterator>
#include <functional>
#include <vector>
 
int rnd()
{
     return rand() % 100;
}
 
//填充区间
int main()
{
     /************************************************************************/
     //fill
     /************************************************************************/
     //将range内的[first,last)内的每个元素赋上值value
     /*
     template<class ForwardIterator, class Type>
     void fill(
          ForwardIterator _First,
          ForwardIterator _Last,
          const Type& _Val
          );
     */
     const int N = 7;
     int a[N];
     std::fill(std::begin(a), std::end(a), 1);
     std::copy(std::begin(a), std::end(a), std::ostream_iterator<int>(std::cout, " "));    //1 1 1 1 1 1 1
     std::cout << std::endl;
 
     /************************************************************************/
     //fill_n
     /************************************************************************/
     //fill_n:将range[first,first+n)内的n个元素赋上value
     /*
     template<class OutputIterator, class Size, class Type>
     void fill_n(
          OutputIterator _First,
          Size _Count,
          const Type& _Val
          );
     */
     std::vector<int> iv;
     std::copy(std::begin(a), std::end(a), std::back_inserter(iv));
     //上面两句等价于:std::vector<int> iv(std::begin(a), std::end(a));
     std::copy(iv.begin(), iv.end(), std::ostream_iterator<int>(std::cout, " "));
     //1 1 1 1 1 1 1
     std::cout << std::endl;
 
     std::fill_n(iv.begin(), 3, 2);
     std::copy(iv.begin(), iv.end(), std::ostream_iterator<int>(std::cout, " "));
     //2 2 2 1 1 1 1
     std::cout << std::endl;
 
     std::vector<int>::iterator it = iv.begin();
     std::advance(it, 2);
     std::fill_n(it, 4, 3);
     std::copy(iv.begin(), iv.end(), std::ostream_iterator<int>(std::cout, " "));
     //2 2 3 3 3 3 1
     std::cout << std::endl;
 
     std::fill_n(std::back_inserter(iv), 5, -1);
     std::copy(iv.begin(), iv.end(), std::ostream_iterator<int>(std::cout, " "));
     //2 2 3 3 3 3 1 -1 -1 -1 -1 -1
     std::cout << std::endl;

     /************************************************************************/
     //generate
     /************************************************************************/
     //generate:调用Gen生成器,将range[first,last)内的每个元素赋上值
     /*
     template<class ForwardIterator, class Generator>
     void generate(
          ForwardIterator _First,
          ForwardIterator _Last,
          Generator _Gen
          );
     */
     std::vector<int> iv2(N);
     std::generate(iv2.begin(), iv2.end(), rnd);
     std::copy(iv2.begin(), iv2.end(), std::ostream_iterator<int>(std::cout, " "));
     std::cout << std::endl;
 
     /************************************************************************/
     //generate_n
     /************************************************************************/
     //generate_n:调用Gen生成器,将range[first,first+n)内的每个元素赋上值
     /*
     template<class OutputIterator, class Diff, class Generator>
     void generate_n(
          OutputIterator First, 
          Diff Count, 
          Generator Gen
          );
     */
     std::generate_n(std::ostream_iterator<int>(std::cout, " "), 10, rnd);
     std::cout << std::endl;
     std::vector<int> iv3;
     std::generate_n(std::back_inserter(iv3), 10, rnd);
     std::copy(iv3.begin(), iv3.end(), std::ostream_iterator<int>(std::cout, " "));
     std::cout << std::endl;
     return 0;
}

====================打个广告,欢迎关注====================

QQ:412425870
csdn博客:
http://blog.csdn.net/caychen
码云:
https://gitee.com/caychen/
github:
https://github.com/caychen

点击群号或者扫描二维码即可加入QQ群:

328243383(1群)



点击群号或者扫描二维码即可加入QQ群:

180479701(2群)



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值