2

私は次のプログラムを持っています

int main()
{
    int myints[] = {1, 2, 3, 3, 4, 6, 7};
    vector<int> v(myints,myints+7);
    vector<int>::iterator low,up;

    sort (v.begin(), v.end());

    low=lower_bound (v.begin(), v.end(), 5);          ^
    up= upper_bound (v.begin(), v.end(), 20);                   ^

    cout << "lower_bound at position " << int(low- v.begin()) << endl;
    cout << "upper_bound at position " << int(up - v.begin()) << endl;

    return 0;
}

上記の出力は次のとおりです

位置 5 の lower_bound 位置 7 の upper_bound 続行するには、任意のキーを押します。. .

私の質問は、上記の場合に上限の戻り値を確認する方法です 20 より大きい値はありませんか?

ありがとう!

4

2 に答える 2

2

上限の反復子が v.end() と等しいかどうかを確認するだけで済みます。

if (up == v.end())
    // there is no value greater than your upper bound

upper_bound の詳細については、http ://www.cplusplus.com/reference/algorithm/upper_bound/ を参照してください。

于 2012-11-02T10:24:55.877 に答える
1
auto up = upper_bound(v.begin(), v.end(), 20);

cout<<*up<<endl; //dereference iterator and you will get a value

反復子が有効かどうかを確認するには、end() 反復子と比較します。

if (up == v.end()) {
    //no upper bound
} 
于 2012-11-02T10:24:05.773 に答える