本文转载自 http://c.biancheng.net/view/681.html 若有侵权请联系删除

定义在 numeric 头文件中的 iota() 函数模板会用连续的 T 类型值填充序列。前两个参数是定义序列的正向迭代器,第三个参数是初始的 T 值。第三个指定的值会被保存到序列的第一个元素中。保存在第一个元素后的值是通过对前面的值运用自增运算符得到的。当然,这意味着 T 类型必须支持 operator++()。下面展示了如何生成一个有连续的浮点值元素的 vector 容器:

std::vector<double> data(9);
double initial {-4};
std::iota (std::begin (data) , std::end (data) , initial);
std::copy(std::begin(data), std::end(data),std::ostream_iterator<double>{std::cout<< std::fixed << std::setprecision(1), " "});
std::cout << std::endl;  // -4.0 -3.0 -2.0 -1.0 0.0 1.0 2.0 3.0 4.0

以 4 为初始值调用 iota() 会将 data 中元素的值设为从 -4 到 +4 的连续值。当然,初始值并不需要一定是整数:

std::iota(std::begin(data), std::end(data), -2.5);
// Values are -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5 4.5 5.5

增量是 1,因此 data 中的值和注释显示的一样。可以将 iota() 算法应用到任意类型的序列上,只要它有自增运算符。下面是另一个示例:

string text {"This is text"};
std::iota(std::begin(text), std::end(text), 'K');
std::cout << text << std::endl;   // Outputs: KLMNOPQRSTUV

很容易看到输出如注释所示,字符串中的字符被设为以 K 开头的字符序列。这个示例发生了什么并不是那么明显:

std::vector<string> words (8);
std::iota(std::begin(words), std::end(words), "mysterious");
std::copy(std::begin(words), std::end(words),std::ostream_iterator<string>{std::cout, " "});
std::cout << std::endl; // mysterious ysterious sterious terious erious rious ious ous

输出如注释所示。这是该算法的一个有趣应用,但没有什么用处。这只适用于第三个参数是一个字符串常量的情形。如果参数是 string{"mysterious"},将无法通过编译,因为没有为 string 类定义 operator++()。字符串常量对应的值是一个 const char* 类型的指针,可以将 ++ 运算符应用到它上面。因此对于 words 中第一个元素后的每个元素,指针的递增会导致字符串常量前面的字母被丢弃。将 ++ 应用到指针的结果是生成一个 string 对象,然后它会被保存到当前的元素序列中。只要 ++ 可以应用到序列中的元素类型上,就能将 iota() 算法应用到序列上。

注意:很有趣的是,iota() 算法来源于 IBM 的编程语言 APL 中的 iota 运算符 ι。在 APL 中,表达式 ι10 会生成从 1 到 10 的整数的 vector。APL 是肯•艾弗森在 20 世纪 60 年代发明的。它是一门相当筒洁的语言,能够隐式处理 vector 和数组。APL 的一个完整程序会从键盘读取任意个值,计算出它们的平均值,然后输出被表示为 10 个字符结果。

c++ iota()函数相关推荐

  1. C++11 :STL中的 iota ()函数

    该函数是C++11 才引入,之前版本没有此函数. iota 函数是一个计算机语言中的函数,用于产生连续的值.该函数得名自 APL 语言,其中用来产生从 1 开始的连续数值. 该函数位于头文件#incl ...

  2. c语言iota函数,C++ iota函数用法详解

    定义在 numeric 头文件中的 iota() 函数模板会用连续的 T 类型值填充序列.前两个参数是定义序列的正向迭代器,第三个参数是初始的 T 值.第三个指定的值会被保存到序列的第一个元素中.保存 ...

  3. 关于STL中iota()函数的使用

    关于iota函数的介绍 iota()函数用于对STL中具有前向迭代器的容器进行一定范围内的批量递增赋值,简单来说就是可以对一个容器进行值的初始化,而且其中的值是递增的,递增的初始值由第三个参数决定. ...

  4. C++ iota()函数

    iota函数对一个范围数据进行赋值: template <class ForwardIterator, class T>void iota (ForwardIterator first, ...

  5. 【C++】之 iota() 函数与 atoi() 函数详解

    参考: https://blog.csdn.net/lixiaogang_theanswer/article/details/72588105 http://c.biancheng.net/view/ ...

  6. C++ iota()函数实践

    头文件#include <numeric>,函数原型: template< class ForwardIt, class T > void iota( ForwardIt fi ...

  7. 函数、符号及特殊字符 latex tex ctex

    函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} ...

  8. 下班前几分钟,我彻底弄懂了并查集

    目录 一.并查集的由来 二.代表元法 2.1 初始化 2.2 查询 2.3 合并 2.4 设计理念 三.并查集的应用 3.1 合并集合 3.2 连通块中点的数量 3.3 亲戚 3.4 省份数量 Ref ...

  9. 转载 Latex各种命令、符号、公式、数学符号、排版(非常详细)

    Latex各种命令.符号.公式.数学符号.排版等 本文仅供学习参考使用,一切版权和解释权均归原作者所有,转载地址: 数学符号详细内容见:http://mohu.org/info/symbols/sym ...

最新文章

  1. Java toString()方法的要点
  2. SQLAlchemy 基本使用
  3. JAVA程序员面试32问(附答案)(转载)
  4. 前端零基础入门: 用css设置文字样式
  5. java 朋友圈功能开发_java开发的微信分享到朋友圈功能
  6. 使用adb命令安装apk
  7. 大数据本质是什么,基础理论应该怎么理解?
  8. 当powergui fft 中empty
  9. 徐思201771010132《面向对象程序设计(java)》第七周学习总结
  10. 生产环境服务CPU飙升问题分析
  11. java几种锁_java中有几种锁
  12. ARM学习day6-->看门狗定时器
  13. 用计算机程序方式打开,怎么使用运行命令符打开电脑程序
  14. OLED 屏幕的使用
  15. 互联网家装,风口下飞不起来的“猪”
  16. 【Python】——Excel
  17. ROS SMACH示例教程(三)
  18. 百度服务器的操作系统是什么,百度公共dns地址是多少|win7设置百度公共dns步骤...
  19. 约数之和 c语言,(c语法百题20)约数之和,约数之和
  20. twitter软件资源_从Twitter实习生到全职Twitter软件工程师的学到的知识

热门文章

  1. 八猴模型html文件,4年来首次更新!八猴4.0都有哪些新功能?
  2. matlab如何造带限高斯白噪声,如何用Matlab产生高斯白噪?
  3. java计算机毕业设计健身俱乐部业务关系系统源码+mysql数据库+系统+lw文档+部署
  4. swi plog 使用 learn prolog now的学习
  5. java获取几小时之前的时间_Java获取当前时间前几个小时
  6. rabbitmq windows 安装教程
  7. VUE+ElementUi学习记录(一)tabs切换导致页面比例不自适应,包含echarts
  8. 网络发现不能启用的问题
  9. 深圳的中学计算机课学什么时候,AP 计算机 专业高效 深圳中学学生如何说
  10. STM32F427 CAN总线配置