我正在查看最近的c ++ 14重载std::equal,我无法弄清楚它们的用途和用途......
两个重载是:
template< class InputIt1, class InputIt2 >
bool equal( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2 );
template< class InputIt1, class InputIt2, class BinaryPredicate >
bool equal( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
BinaryPredicate p );
Run Code Online (Sandbox Code Playgroud)
我完全理解std::equal只使用一种传统的传统InputIt2,但第二种InputIt2 last2是扭曲我的大脑.有人可以解释一下这个例子吗?
gho*_*ast 25
新的重载实际上非常棒.你传入两个完整的范围,开始和结束,而不是运行较短的一个并调用未定义的行为,算法停止.
这些改进也被添加到std::mismatch和std::is_permutation.您可以在提案中详细了解此信息
因为std::equal,false如果长度不相等,算法将简单地返回.
因为std::mismatch,如果算法到达一个范围的末尾,它将返回迭代器和来自另一个范围的相应迭代器.
因为std::is_permutation,false如果范围的长度不相等,算法也会简单地返回.
为了推理原因,请考虑程序员检查长度不一定是可能的或便宜的.从std::list没有原始列表的a获得的范围将需要遍历以获得大小.使用a的范围InputIterator,例如用于从标准输入读取,在它到达终点之前可能是无限的,并且只允许遍历一次,因此在执行此操作后算法将无法再使用它.感谢下面的Benjamin Lindley最后一个例子.
| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |