You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::equal_range实现优化:复用lower_bound结果是否安全?

关于std::equal_range优化实现的安全性疑问

cppreference网站给出了std::equal_range的一种简化实现:

template<class ForwardIt, class T>
std::pair<ForwardIt, ForwardIt> 
    equal_range(ForwardIt first, ForwardIt last, const T& value)
{
    return std::make_pair(std::lower_bound(first, last, value),
                          std::upper_bound(first, last, value));
}

疑问:为什么std::upper_bound要从first重新开始遍历,而不是复用std::lower_bound的结果?比如可以改成下面的优化实现:

template<class ForwardIt, class T>
std::pair<ForwardIt, ForwardIt> 
    equal_range(ForwardIt first, ForwardIt last, const T& value)
{
    ForwardIt lower = std::lower_bound(first, last, value);
    return std::make_pair(lower, std::upper_bound(lower, last, value));
}

显然重复检查[first, lower)区间是多余的,因为upper_bound要找的元素必然处于[lower, last)区间内。已知cppreference提供的是简化示例而非经过极致优化的版本,现在想确认这种简单优化是否安全,有没有像空数组这类没考虑到的边界情况?不追求极致性能,只需要确认该优化的安全性。

更新:有评论建议用libc++库的测试用例来验证这个优化实现的正确性。


内容的提问来源于stack exchange,提问作者Damir Tenishev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:00:58