对给定的最小值和最大值限制std :: vector

时间:2017-04-02 21:52:54

标签: c++ vector stl

我有std::vectordouble个值,我正在寻找一种方法来将排序结果限制为某些最小值和最大值。让我举个例子 -

std::vector<double> v;
v.push_back(2.5);
v.push_back(3.5);
v.push_back(4.5);
v.push_back(5.5);
v.push_back(6.5);

在上面的示例中,如果我执行limit(v, 4.0, 7.0);,它应该为我提供索引,例如[2][4]或结束或其他。我尝试搜索<algorithm>标题,但找不到一个:/如果需要,我也可以使用其他库。

2 个答案:

答案 0 :(得分:3)

您正在寻找std::lower_boundstd::upper_bound

auto it1 = std::lower_bound(v.begin(), v.end(), 4.0);
auto it2 = std::upper_bound(it1, v.end(), 7.0);

for (auto it = it1; it != it2; ++it)
    std::cout << *it << "\n";

答案 1 :(得分:1)

Kerrek SB的解决方案非常棒,但暗示v已排序。如果未排序,请使用std::partition

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
  std::vector<double> v = { 4.5, 2.5, 5.5, 6.5, 3.5 };

  auto part = std::partition(v.begin(), v.end(), [](double d){return 4 < d && d < 7;});

  for (auto it = std::begin(v); it != part; ++it)
    std::cout << *it << "\n";
}

Demo