C++ STL中的Binary search(二分查找),360°深入了解Flutter
在C++ STL中,二分查找通常是通过std::binary_search
、std::lower_bound
、std::upper_bound
以及std::equal_range
等算法实现的。
以下是使用std::binary_search
进行二分查找的示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> data = {1, 3, 5, 7, 9, 11};
int value = 7;
if (std::binary_search(data.begin(), data.end(), value)) {
std::cout << value << " found in data." << std::endl;
} else {
std::cout << value << " not found in data." << std::endl;
}
return 0;
}
以上代码首先定义了一个已排序的整数向量data
,然后使用std::binary_search
来查找value
是否存在于data
中。如果找到了value
,则输出其被找到了,否则输出其未被找到。
注意:std::binary_search
要求所用容器是已排序状态。
如果你想找到值的确切位置,可以使用std::lower_bound
或std::upper_bound
。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> data = {1, 3, 5, 7, 9, 11};
int value = 7;
auto it = std::lower_bound(data.begin(), data.end(), value);
if (it != data.end() && *it == value) {
std::cout << "Found " << value << " at index " << std::distance(data.begin(), it) << std::endl;
} else {
std::cout << value << " not found in data." << std::endl;
}
return 0;
}
在这个例子中,std::lower_bound
找到了第一个不小于value
的元素的位置,然后通过检查该位置的值是否确实等于value
来确认是否找到了value
。如果找到了,就输出其位置,否则输出未找到。
这些是在C++ STL中使用二分查找的基本方法。
评论已关闭