2016-12-08 3 views
0

У меня есть векторный массив, который заполнен некоторыми значениями двойного вектора. Я хочу напечатать все цифры ниже 2.0. Мое ограничение, я должен использовать std::lower_bound(). Как это может быть сделано? Вот минимальный рабочий код, с которым я пытался работать, однако он дает только одиночные значения:Диапазон элементов печати ниже определенного значения Использование 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

диапазон должен быть отсортирован использовать 'зЬй :: LOWER_BOUND 'правильно. – PaulMcKenzie

+0

@PaulMcKenzie Я ошибочно отредактировал этот бит, просто вернул его. –

ответ

1

От cppreference/lower_bound:

Возвращает итератор, указывающий на первый элемент в диапазоне [первый, последний), которое не меньше, чем (т.е. большего или равное) значение.

Поэтому, если вы хотите, чтобы напечатать все элементы ниже 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 << " ";