c++ - 为什么不是条件 *First1 == * First2 ?? (C++ STL包含函数实现)

标签 c++ algorithm stl

我是一名学习 STL C++ 的学生,有一个简单的问题。

在学习算法库中的includes函数如何实现的时候一直纳闷。看到这段代码 (此代码来自 https://en.cppreference.com/w/cpp/algorithm/includes )

template<class InputIt1, class InputIt2> 
bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2) {
    for (; first2 != last2; ++first1) {
        if (first1 == last1 || *first2 < *first1)
            return false;
        if ( !(*first1 < *first2) )
            ++first2;
    }
    return true;
}

这部分有问题。

if ( !(*first1 < *first2) )
            ++first2;

此部分显示为确定*first1 是否存在的代码。等于*first2确定给定的部分序列是否是有序序列的一部分。我想。

如果是,*first1 == * first2似乎足够了,我想知道为什么!(first1 < first2) .

这种情况有什么特殊原因吗??

最佳答案

类型所需的概念之一 InputIt1是它实现了 <运算符(operator)。 (其他比较器 ==!=<=>=> 都可以写成 < 如果你允许用 ! 否定表达式,虽然正式替换== 被称为等效。)

C++ 标准库函数因此根据 < 编写条件检查.

引用:https://en.cppreference.com/w/cpp/named_req/LessThanComparable

关于c++ - 为什么不是条件 *First1 == * First2 ?? (C++ STL包含函数实现),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824071/

相关文章:

c++ - 当我调用它两次时,set_union 得到了错误的结果

c++ - getline() 函数正在跳过输入

c++ - 是否可以编写一个抽象类,其中构造函数选择适当的子类在 C++ 中实例化?

python - 具有 "Gray code"类似属性的 n 个项目的 k 组合

algorithm - 渐变和渐变有什么区别?

c++ - 正确读取和写入 std::vector 到文件中

c++ - 正则表达式的开发人员

c++ - 类型定义应该依赖于模板参数

python - 优化 Python 中的函数以处理大块数据

c++ - 为什么标准不提供通过内容检查来哈希C字符串的特化