为什么 std::ranges::binary_search 和 std::binary_search 对同一输入产生不同的结果?

Why do std::ranges::binary_search and std::binary_search produce different results for the same input?

提问人:KryptoHuman 提问时间:9/19/2023 最后编辑:AmitKryptoHuman 更新时间:10/31/2023 访问量:201

问:

我不明白为什么工作与.例如,这种代码:std::ranges::binary_searchstd::binary_search

std::vector<int> A = { 0, 10, 12, 30 };
std::cout << std::ranges::binary_search(A.begin(), A.end(), 28) << std::endl;
std::cout << std::binary_search(A.begin(), A.end(), 28) << std::endl;

这将输出:

1
0

有人可以解释吗?

我尝试在矢量中更改类型,并且检查了没有迭代器的范围版本。当然,我也检查了 cppppreference 的文档,但这些都无济于事。

C++ C++20 二进制搜索 标准范围

评论

13赞 康桓瑋 9/19/2023
这似乎是我报告的 libc++ 中的一个错误并已在 clang-16 中修复
0赞 Joseph Larson 9/20/2023
范围版本应该采用开始和结束,还是范围?
2赞 Eugene 9/20/2023
@JosephLarson通常,std::ranges 算法对一个范围和一对迭代器都有重载。

答:

0赞 Amit 10/28/2023 #1
#include <vector>
#include <algorithm>
#include <iostream>

int main()
{
    std::vector<int> A = { 0, 10, 12, 30 };
    
    std::cout << std::ranges::binary_search(A.begin(), A.end(), 28) << std::endl;
    std::cout << std::binary_search(A.begin(), A.end(), 28) << std::endl;
}

两者都产生相同的结果:

0
0

演示