上限/下限不像我预期的那样工作,不明白为什么

Zyl*_*der 2 c++ lower-bound upperbound

这是代码.结果我得到"4 4".不明白为什么它不是"2 4"(根据下限和上限的'defenitions).

#include <bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> v = {1, 2, 4, 5};
    vector<int>::iterator s , f;
    s = lower_bound(v.begin(), v.end(), 3);
    f = upper_bound(v.begin(), v.end(), 3);
    cout << (*s) << " " << (*f);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*ath 5

来自std::lower_bound:

返回指向范围[first,last]中第一个元素的迭代器 ,它不会比val小.

第一个元素(从向量的开头)不小于34因此lower_bound返回4.

来自std::upper_bound:

返回指向范围[first,last]中第一个元素的迭代器,它比较大于val.

第一个元素(来自载体的开始),它大于34并因此upper_bound返回4.

这种混淆的原因是因为upper_bound返回大于给定值的第一个元素,因此通过对称性我们期望lower_bound返回小于给定值的最后一个元素(从向量的开头).但唉,这个std功能并不遵循这种"预期的"对称性.