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 的下界 位置 7 的上界 按任意键继续。. .

我的问题是如何在上述情况下检查上限返回值没有大于 20 的值?

谢谢!

4

2 回答 2

2

您只需要检查上界的迭代器是否等于 v.end():

if (up == v.end())
    // there is no value greater than your 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 回答