繁体   English   中英

不应该 lower_bound 返回一个指向 end() 的迭代器吗?

[英]Shouldn't lower_bound return an iterator pointing to end()?

我试图更好地理解lower_bound 我有以下代码:

#include <algorithm>
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> data = { -1,0,3,5,9,12 };
 
        auto lower = std::lower_bound(data.begin(), data.end(), -2);
 
        if (lower != data.end())
            std::cout << *lower << " at index " << std::distance(data.begin(), lower);
        else
            std::cout << "not found";
        std::cout << '\n';
}

请注意,这只是从 cppreference.com 修改的示例代码。 根据那里的文档:

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

鉴于我正在寻找的元素-2不存在于矢量data中,我希望lower_bound设置为lower==data.end() 但是,我得到的是:

-1 在索引 0

反而。 有人可以解释为什么吗?

非常感谢!

记住std::lower_bound如何工作的最简单方法是,它将一个迭代器返回到应该插入项目的位置以保留排序顺序。 在您的情况下,这将是序列的开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM