使用std :: lower_bound()打印元素范围低于某个值

时间:2016-12-08 10:22:33

标签: c++ stl

我有一个矢量数组,其中填充了一些双向量值。我想打印2.0以下的所有数字。我的限制,我必须使用std::lower_bound()。如何才能做到这一点?这是我尝试使用的最小工作代码,但它只提供单个值:

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

using namespace std;

int main()
{
    const double data[] = { 5.3, 9.2, 7.5, 6.9, 4.5 };
    const int dataCount = sizeof(data) / sizeof(data[0]);
    vector<double> vec(data, data + dataCount);
    sort(vec.begin(), vec.end());

    auto less2 = lower_bound(vec.begin(), vec.end(), 2.0);
    auto less4 = lower_bound(vec.begin(), vec.end(), 4.0);
    auto less6 = lower_bound(vec.begin(), vec.end(), 6.0);
    cout << "\nLess than 2.0 : " << *less2 << endl << "Less than 4.0  : " << *less4 << endl << "Less than 6.0  : " << *less6 << endl;
    return 0;
}

问候。

1 个答案:

答案 0 :(得分:1)

来自cppreference/lower_bound

  

返回指向范围[first,last]中第一个元素的迭代器,该元素不小于(即大于或等于)value。

因此,如果要打印2.0下面的所有元素,则需要从begin(vec)迭代到从std::lower_bound返回的迭代器:

auto less2 = lower_bound(vec.begin(), vec.end(), 2.0);
for(auto it = begin(vec); it != less2; ++it) cout << *it << " ";