【发布时间】:2013-12-04 14:20:13
【问题描述】:
给定一个像std::vector<T> 这样的容器,其中T 是数值量的泛型类型(如int、float 等...),我想要一个作为参数的谓词:
- 容器本身
- 一个范围,一种表示一组数值的类型,或者只是两个极端数值,应该验证谓词
- 容差,一种表示范围的可能(可选)扩展的类型,以相对术语(如百分比)或绝对术语(使用数字)
我想有一个输出:
- 谓词的结果
- 如果范围对于某些数量来说不够用,那么公差是否被某些值“使用”(但谓词仍然是
true)
在 C++ 标准库中看起来甚至没有 range 的概念,这对我来说很奇怪,仅仅是因为有很多有趣的算法和类型,但在这种情况下没有任何东西可以满足我的目的.
在继续我自己的道路之前,我想问一下,C++ 库中的类型和算法有类似的东西吗?
【问题讨论】:
-
听起来像是
std::accumulate和合适的 lambda 的简单组合。 -
无需自己努力就可以提出很好的问题。
-
在标准库中,范围通常由两个单独的值表示,或者
std::pair需要一个值。缺乏明确的“范围”概念很大程度上是由于历史惯性 - 虽然这很好,但认为不值得对库进行大规模更改以支持它。 -
@KerrekSB 因此,对于容器中的每个值,您建议将超出范围的部分“添加”到全局计数器,然后在循环结束时验证计数器?它可以工作,但它确实......我应该努力使它更具功能性和可重用性......
-
@KerrekSB 我宁愿使用
std::find_if,因为我们想在发现超出范围的内容时停止。或者,正如 jrok 所说,std::all_of:)
标签: c++ c++11 containers numerical