我是一名学习 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/