博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小二,给我来一个递增序列
阅读量:6291 次
发布时间:2019-06-22

本文共 1094 字,大约阅读时间需要 3 分钟。

有些时候,我们急需用一段递增序列来初始化容器。这时候,我们可能会首先想起 std::fill, 但如果真正熟悉这个函数,会知道这货也就能用一个单一数值填满你的容器。或许你开始一筹莫展,决定土办法,一个循环,push 递增。

C++ 11 里有一个比较低调的方法可以一句话实现这个需求。即 .

好了,小二,赶紧上一盘递增序列。

cpp#include 
std::vector
ivec(10);std::iota(ivec.begin(), ivec.end(), 0);// ivec: 0,1,2,3,4,5,6,7,8,9// 这个递增可不止局限于数值哟std::vector
::iterator> iter_vec(ivec.size());std::iota(iter_vec.begin(), iter_vec.end(), ivec.begin());for (auto it : iter_vec) std::cout << *it << " ";// out: 0,1,2,3,4,5,6,7,8,9

实现细节

这个实现比较好理解,其实就是上述的土办法,一个循环搞定。

cpptemplate
void iota(ForwardIterator first, ForwardIterator last, T value){ while(first != last) { *first++ = value; ++value; }}

C++ 0x的折衷

如果没有 C++11 的环境呢。我们可以借助 std::generate + 闭包结构体来模拟实现。

cpp#include 
struct IncGenerator { int current_; IncGenerator (int start) : current_(start) {} int operator() () { return current_++; }};std::vector
ivec(10);IncGenerator g(0);std::generate(ivec.begin(), ivec.end(), g);// ivec: 0,1,2,3,4,5,6,7,8,9

小二摸摸脑袋说,这还不如土办法写个循环呢。。。

转载地址:http://ryuta.baihongyu.com/

你可能感兴趣的文章
分布式锁的一点理解
查看>>
idea的maven项目,install下载重复下载本地库中已有的jar包,而且下载后jar包都是lastupdated问题...
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web服务器
查看>>
树莓派3链接wifi
查看>>
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>
DWR实现服务器向客户端推送消息
查看>>
js中forEach的用法
查看>>
Docker之功能汇总
查看>>
!!a标签和button按钮只允许点击一次,防止重复提交
查看>>