📅  最后修改于: 2023-12-03 14:39:54.312000             🧑  作者: Mango
在 C++ 中,std::set::upper_bound
和 std::upper_bound
都是与查找有序范围中大于给定值的第一个位置相关的函数。尽管它们具有相似的名称和功能,但它们实际上是不同的函数,用法和用途也不同。
std::set::upper_bound
是 std::set
容器类的成员函数。它用于返回大于给定元素的第一个迭代器。
iterator upper_bound (const key_type& key);
key_type
:要查找的元素。std::set
是一个有序不重复元素的容器,它基于红黑树的数据结构实现。std::set::upper_bound
返回的是集合中大于给定元素的第一个元素的迭代器。如果不存在这样的元素,则返回 end()
。
示例用法:
std::set<int> mySet = {10, 20, 30, 40, 50};
auto it = mySet.upper_bound(25);
在上面的示例中,it
将指向大于 25 的第一个元素,即 30。
std::upper_bound
是一个全局算法函数,位于 <algorithm>
头文件中。它用于返回大于给定值的第一个位置。
ForwardIt upper_bound (ForwardIt first, ForwardIt last, const T& value);
first
和 last
:要查找的范围。value
:要比较的值。std::upper_bound
可用于任何有序的范围(如数组、向量等)。它返回的是大于给定值的第一个位置的迭代器。如果不存在这样的值,则返回的是 std::upper_bound
的第二个参数 last
。
示例用法:
std::vector<int> myVec = {10, 20, 30, 40, 50};
auto it = std::upper_bound(myVec.begin(), myVec.end(), 25);
在上面的示例中,it
将指向大于 25 的第一个元素,即 30。
总结一下 std::set::upper_bound
和 std::upper_bound
的区别:
std::set::upper_bound
是 std::set
类的成员函数,std::upper_bound
是全局算法函数。std::set::upper_bound
只能用于有序不重复集合,std::upper_bound
可用于任何有序范围。std::set::upper_bound
的参数是要查找的元素值,std::upper_bound
的参数是要比较的值。std::set::upper_bound
返回的是迭代器,std::upper_bound
返回的是位置值。通过理解和掌握 std::set::upper_bound
和 std::upper_bound
的区别,程序员可以根据具体情况选择合适的函数来实现查找操作。