std::experimental::ranges::mismatch

来自cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
实验性
技术规范
文件系统库(文件系统 TS)
库基础(库基础 TS)
库基础 2(库基础 TS v2)
库基础 3(库基础 TS v3)
并行扩展(并行 TS)
并行扩展 2(并行 TS v2)
并发扩展(并发 TS)
并发扩展 2(并发 TS v2)
概念(概念 TS)
范围(范围 TS)
反射(反射 TS)
数学特殊函数(特殊函数 TR)
实验性非 TS 功能特性
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
template< InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity,
          class Pred =ranges::equal_to<>>
    requires IndirectRelation<Pred, projected<I1, Proj1>, projected<I2, Proj2>>
auto mismatch( I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{},
               Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})

    ->ranges::tagged_pair<tag::in1(I1), tag::in2(I2)>;
(1) (范围 TS)
template< InputRange R1, InputRange R2,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity,
          class Pred =ranges::equal_to<>>
    requires IndirectRelation<Pred, projected<ranges::iterator_t<R1>, Proj1>,
                              projected<ranges::iterator_t<R2>, Proj2>>
auto mismatch( R1&& r1, R2&& r2, Pred pred = Pred{},
               Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
    ->ranges::tagged_pair<tag::in1(ranges::safe_iterator_t<R1>),

                           tag::in2(ranges::safe_iterator_t<R2>)>;
(2) (范围 TS)
template< InputIterator I1, Sentinel<I1> S1, class I2,

          class Pred  =ranges::equal_to<>,
          class Proj1 =ranges::identity, class Proj2 =ranges::identity>
    requires InputIterator<std::decay_t<I2>>&&!Range<I2>&&
             IndirectRelation<Pred, projected<I1, Proj1>,
                                    projected<std::decay_t<I2>, Proj2>>
auto mismatch( I1 first1, S1 last1, I2&& first2_, Pred pred = Pred{},
               Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})

    ->ranges::tagged_pair<tag::in1(I1), tag::in2(std::decay_t<I2>)>;
(3) (范围 TS)
(弃用)
template< InputRange R1, class I2, class Pred =ranges::equal_to<>,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity>
    requires InputIterator<std::decay_t<I2>>&&!Range<I2>&&
             IndirectRelation<Pred, projected<ranges::iterator_t<R1>, Proj1>,
                                    projected<std::decay_t<I2>, Proj2>>
auto mismatch( R1&& r1, I2&& first2_, Pred pred = Pred{},
               Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
    ->ranges::tagged_pair<tag::in1(ranges::safe_iterator_t<Rng1>),

                           tag::in2(std::decay_t<I2>)>;
(4) (范围 TS)
(弃用)
1) 返回两个范围中第一对不匹配的元素:其一由 [first1last1) 定义而另一个由 [first2last2) 定义。
2)(1) 相同,但用 r1 为第一源范围并用 r2 为第二源范围,如同以 ranges::begin(r1)first1,以 ranges::end(r1)last1,以 ranges::begin(r2)first2,并以 ranges::end(r2)last2
3)(1) 相同,但表现如同 first2std::decay_t<I2> first2 =std::forward<I2>(first2_);last2ranges::unreachable{}。底层算法从不对 first2 自增多于 last1 - first1 次。
4)(3) 相同,但用 r1 为第一源范围,如同以 ranges::begin(r1)first1 并以 ranges::end(r1)last1

pred 对两个范围投射后的元素进行比较,如同调用 ranges::invoke(pred, ranges::invoke(proj1, *i), ranges::invoke(proj2, *j))

尽管声明描述如上,算法声明的模板形参的实际数量和顺序是未指定的。从而若在调用算法时使用显式模板实参,则程序很可能不可移植。

目录

[编辑]参数

first1, last1 - 第一元素范围
r1 - 第一元素范围
first2, last2 - 第二元素范围
r2 - 第二元素范围
first2_ - 第二元素范围的开头
pred - 运用于投射后范围的谓词
proj1 - 运用于第一范围中元素的投射
proj2 - 运用于第二范围中元素的投射

[编辑]返回值

tagged_pair 对象,带有指向首对不相等元素(第一范围中的迭代器具有标签 in1 而第二范围中的迭代器具有标签 in2)。

如果比较抵达 last1last2 时未找到不匹配,无论哪个先发生,则对偶持有该为迭代器和另一范围的对应迭代器。

[编辑]复杂度

最多 last1 - first1 次运用谓词和各投射。

[编辑]可能的实现

template<InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2, class Proj1 =ranges::identity, class Proj2 =ranges::identity, class Pred =ranges::equal_to<>> requires IndirectRelation<Pred, projected<I1, Proj1>, projected<I2, Proj2>>auto mismatch(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})->ranges::tagged_pair<tag::in1(I1), tag::in2(I2)>{while(first1 != last1 && first2 != last2 &&ranges::invoke(pred, ranges::invoke(proj1, *first1), ranges::invoke(proj2, *first2))){++first1;++first2;}return{first1, first2};}

[编辑]示例

[编辑]参阅

查找两个范围的首个不同之处
(函数模板)[编辑]
确定元素的两个集合是否相同
(函数模板)[编辑]
寻找首个满足特定判别标准的元素
(函数模板)[编辑]
当一个范围按字典顺序小于另一个范围时,返回 true
(函数模板)[编辑]
搜索一个元素范围
(函数模板)[编辑]
close