C++11 列表初始化、序列生成器 Generator

int a[] = {1,3,5,7,9};
std::for_each(std::begin<int>(a), std::end<int>(a), [&](int n) {cout << n;});
//这样会把13579输出来。

二、

C++11扩大了初始化列表的适用范围,使其可用于所有内置类型和用户定义的类型。无论是初始化对象还是某些时候为对象赋新值,都可以使用这样一组由花括号括起来的初始值了。使用初始化列表时,可添加=,也可不添加。

//定义一个变量并初始化
int units_sold=0;
int units_sold(0);
int units_sold={0};  //列表初始化
int units_sold{0};    //列表初始化


当初始化列表用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们使用列表初始化值存在丢失信息的风险,则编译器将报错:

long double ld=3.1415926536;
int a={ld},b={ld}; //错误:转换未执行,因为存在丢失信息的风险
int c(ld),d=ld;   //正确:转换执行,且确实丢失了部分值


三、

1. 问题:
   常常,我们编写C++程序时,需要产生 前 n 个连续的 序列:例如:1-10, 3-20 等等序列,
2. 方案
 马上想到的解决方案是:自定义一个按照顺序产生序列的 Generator,然后调用std::generate函数来产生序列并存储至容器中。
3. 资源:
  STL为我们提供了 2个generate 函数:std::generate 和 std::generate_n。如下是两个函数的声明:
   1. template <class ForwardIterator, class Generator>
   void generate(ForwardIterator first, ForwardIterator last, Generator gen);
   2. template <class OutputIterator, class Size, class Generator>
   OutputIterator generate_n(OutputIterator first, Size n, Generator gen);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值