首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`closed_iota`和“`iota`”的区别?

`closed_iota`和“`iota`”的区别?
EN

Stack Overflow用户
提问于 2020-10-22 17:15:38
回答 2查看 174关注 0票数 1

从ranges v3库来看,closed_iotaiota有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-22 17:22:22

第二种方法是采用标准的C++方法来表示范围--默认为右侧开放范围。第一个是包容性的。

iota采用两个参数:startend。它生成从startend的元素,而不包括end

closed_iota采用两个参数:startend。它生成从startend的元素,包括end值。

示例:iota(1, 5)表示由{1, 2, 3, 4}组成的范围,closed_iota(1, 5)表示由{1, 2, 3, 4, 5}组成的范围。

您希望两者兼得,因为在默认情况下,我们期望事物是右手边的排他性的,但有时您需要整个范围的值。在这种情况下,您需要closed_iota

然而,也有一些不一致的地方--看看std::uniform_xxx_distribution

票数 5
EN

Stack Overflow用户

发布于 2020-10-22 18:16:25

closed_iotaiota都使用两个参数,一个begin值和一个end值,并生成包含beginend之间所有值的一系列值。

前者生成从beginend包含的所有值,后者也这样做,但最后一个值(即end )被排除在外。

您可能想知道closed_iota的意义是什么,因为您总是可以进行这种转换:

代码语言:javascript
复制
// from this
closed_iota(begin, end);
// to this
iota(begin, end + 1);

原因之一是这种转变并不总是可能的。考虑一下当end是最大可能的int时会发生什么。然后,第二个版本将在执行end + 1时调用UB。您可以通过使用closed_iota来解决这个特殊情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64487289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档