一个谓词来检查容器的值是否在一个范围内?

时间:2013-12-04 14:20:13

标签: c++ c++11 containers numerical

给定像std::vector<T>这样的容器,其中T是数字量的通用类型(如intfloat等...),我想有一个谓词作为参数:

  • 容器本身
  • 范围,表示数值集的类型,或简单的2个极端数值,应该验证谓词
  • 容差,表示范围的可能(可选)扩展的类型,相对术语(如百分比)或绝对值(带数字)

我想作为输出:

  • 谓词的结果
  • 如果范围对于某些数量不够,那么容差是否被某些值“使用”(但谓词仍为true

在C ++标准库中看起来甚至没有range的概念,这对我来说很奇怪,仅仅是因为有很多有趣的算法和类型,但没有什么可以满足我的目的这种情况。

在继续我自己的路径之前,我想,在C ++库中的类型和算法方面有这样的东西吗?

1 个答案:

答案 0 :(得分:1)

我认为我首先要使用std::minmax_element来查找集合中最小和最大的元素,而不是评估集合中每个项目的条件。

从那里开始,测试result.first < minimum和/或result.second > maximum是否很简单。

处理公差基本上是在扩大范围内重复测试的问题。

至于这是否可能比std::find_ifstd::all_of更好,它将取决于您在集合中预期的项目数量以及找到超出范围的值的可能性这将允许提前退出。我认为您需要对数据有一些了解才能对其进行有意义的预测。