gpt4 book ai didi

c++ - 为什么 boost uniform_int_distribution 采用封闭范围(而不是半开放范围,遵循常见的 C++ 用法)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:33 24 4
gpt4 key购买 nike

标题说明了一切。甚至还有一个 warning在文档页面中:

Warning: Contrary to common C++ usage uniform_int_distribution does not take a half-open range. Instead it takes a closed range. Given the parameters 1 and 6, uniform_int_distribution can can produce any of the values 1, 2, 3, 4, 5, or 6.

当 C++ 中的常见做法是使用开放范围 [begin, end) 时,为什么要这样做?

最佳答案

只有闭合范围,您才能创建 uniform_int_distribution ,产生任何整数:

uniform_int_distribution<int> dist(std::numeric_limits<int>::min(), std::numeric_limits<int>::max());

如果这是半开范围,您将永远无法到达 std::numeric_limits<int>::max() , 但只有 std::numeric_limits<int>::max() - 1 .

std::uniform_int_distribution也是一样的情况在 C++11 标准库中。

迭代器的半开范围很常见,因为可以很容易地表达空范围(通过设置 begin == end )。这对发行版没有意义。


引用:Stephan T. Lavavej 在他的演讲中提到了这个确切原因 "rand() Considered Harmful"在 Going Native 2013(大约第 14 分钟)。本次演讲是关于 C++11 <random> ,但当然同样的推理也适用于 boost 。

关于c++ - 为什么 boost uniform_int_distribution 采用封闭范围(而不是半开放范围,遵循常见的 C++ 用法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23703509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com