C++ 给出意外结果的下界()

C++ 给出意外结果的下界(),c++,stl,runtime-error,lower-bound,C++,Stl,Runtime Error,Lower Bound,我写了一个代码,需要从平方数序列中找到下界。但下界给出了上界的结果 这是我的代码和编译器链接: 预期产量 将迭代器返回到大于或等于目标值的第一个元素: 返回指向范围[first]中第一个元素的迭代器, 不小于即大于或等于值的最后一个,或 如果没有找到这样的元素 因为9是大于或等于5的第一个值,所以它当然更大,结果是完全正确的 如果您试图找到一个已经在v中的元素,如9,那么对于std::lower_bound和std::upper_bound,您将得到不同的结果: std::lower_bound

我写了一个代码,需要从平方数序列中找到下界。但下界给出了上界的结果

这是我的代码和编译器链接:

预期产量

将迭代器返回到大于或等于目标值的第一个元素:

返回指向范围[first]中第一个元素的迭代器, 不小于即大于或等于值的最后一个,或 如果没有找到这样的元素

因为9是大于或等于5的第一个值,所以它当然更大,结果是完全正确的

如果您试图找到一个已经在v中的元素,如9,那么对于std::lower_bound和std::upper_bound,您将得到不同的结果:

std::lower_bound工作正常。该函数返回的第一个元素不小于提供的值。由于9是不小于5的第一个值,因此获得该元素

在这种情况下,upper_bound返回的元素与它返回的第一个大于指定值的元素相同

std::vector data = {4,4,4};
auto low = std::lower_bound(data.begin(), data.end(), 4);
auto high = std::upper_bound(data.begin(), data.end(), 4);

在这种情况下,低将以4不小于4开始,而高将以向量中没有大于4的元素结束。

标准中的引用,[下限]:

模板 ForwardIterator lower_boundForwardIterator first,ForwardIterator last,const T&value

返回:范围[first,last]中最远的迭代器i,这样对于范围[first,i]中的每个迭代器j,以下相应条件保持:*j
感谢您的澄清:。我认为对于下限和上限得到相同的答案是错误的_bound@SyedSohan当元素不在范围内时,下限的结果等于上限,这就是std::equal\u range返回的值。您需要将beginv作为第一个参数提交给std::distance而不是second。@Slava yup,或设置-2和-3:为什么您希望std::lower_bound将迭代器返回到4,而不是9?@Slava这里的解释很好。我不会忘记的。非常感谢。
Postion 2  value  9
Postion 1  value  4
std::distance(begin(v), std::lower_bound(begin(v), end(v), 9)); // 2
std::distance(begin(v), std::upper_bound(begin(v), end(v), 9)); // 3
std::vector data = {4,4,4};
auto low = std::lower_bound(data.begin(), data.end(), 4);
auto high = std::upper_bound(data.begin(), data.end(), 4);