从ranges v3库来看,closed_iota和iota有什么区别?
发布于 2020-10-22 17:22:22
第二种方法是采用标准的C++方法来表示范围--默认为右侧开放范围。第一个是包容性的。
iota采用两个参数:start和end。它生成从start到end的元素,而不包括end。
closed_iota采用两个参数:start和end。它生成从start到end的元素,包括end值。
示例:iota(1, 5)表示由{1, 2, 3, 4}组成的范围,closed_iota(1, 5)表示由{1, 2, 3, 4, 5}组成的范围。
您希望两者兼得,因为在默认情况下,我们期望事物是右手边的排他性的,但有时您需要整个范围的值。在这种情况下,您需要closed_iota。
然而,也有一些不一致的地方--看看std::uniform_xxx_distribution。
发布于 2020-10-22 18:16:25
closed_iota和iota都使用两个参数,一个begin值和一个end值,并生成包含begin和end之间所有值的一系列值。
前者生成从begin到end包含的所有值,后者也这样做,但最后一个值(即end )被排除在外。
您可能想知道closed_iota的意义是什么,因为您总是可以进行这种转换:
// from this
closed_iota(begin, end);
// to this
iota(begin, end + 1);原因之一是这种转变并不总是可能的。考虑一下当end是最大可能的int时会发生什么。然后,第二个版本将在执行end + 1时调用UB。您可以通过使用closed_iota来解决这个特殊情况。
https://stackoverflow.com/questions/64487289
复制相似问题