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; 
} 

よろしくお願いします。 cppreference/lower_boundから

+1

範囲を使用するようにソートする 'のstd :: LOWER_BOUNDを必要とします'正しく。 – PaulMcKenzie

+0

@PaulMcKenzie私は間違ってそのビットを編集してしまいました。 –

答えて

1

(すなわち大きいか)に等しい値以上である範囲[最初、最後)の最初の要素を指すイテレータを返します。あなたは2.0以下のすべての要素を印刷する場合、イテレータはstd::lower_boundから返さに

したがって、あなたはbegin(vec)から反復処理する必要があります。

auto less2 = lower_bound(vec.begin(), vec.end(), 2.0); 
for(auto it = begin(vec); it != less2; ++it) cout << *it << " "; 
関連する問題