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

我想知道在学习如何在算法库中实现包含功能时。看到这个代码
(此代码来自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)

是否有任何特殊原因导致这种情况?

最佳答案

要求平等是不必要的坚强条件。一个strict weak ordering(即< must be)就足够了。

请注意,!(*first2 < *first1)是由先前条件为false暗示的,因此当first2*first1根据顺序相等时,*first2会增加。

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

10-13 07:11