4179 lines
410 KiB
HTML
4179 lines
410 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>标准库头文件 <algorithm></title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_header_algorithm skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">标准库头文件</span> <algorithm></h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-header.html">header</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>此头文件是<a href="cpp-algorithm.html">算法</a>库的一部分。</p>
|
|
<table class="t-dsc-begin">
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E5.8C.85.E5.90.AB">包含</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-header-initializer_list.html"><span class="t-lines"><span><initializer_list></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc"><a href="cpp-utility-initializer_list.html">std::initializer_list</a></span> 类模板</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E7.B1.BB">类</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于命名空间 <code>std::ranges</code></div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E7.B1.BB.E5.9E.8B">返回类型</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-return_types-in_fun_result.html"><span class="t-lines"><span>ranges::in_fun_result</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提供存储一个迭代器与一个函数对象为单个单元的方式<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-return_types-in_in_result.html"><span class="t-lines"><span>ranges::in_in_result</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提供存储二个迭代器为单个单元的方式<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-return_types-in_out_result.html"><span class="t-lines"><span>ranges::in_out_result</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提供存储二个迭代器为单个单元的方式<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-return_types-in_in_out_result.html"><span class="t-lines"><span>ranges::in_in_out_result</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提供存储三个迭代器为单个单元的方式<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-return_types-in_out_out_result.html"><span class="t-lines"><span>ranges::in_out_out_result</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提供存储三个迭代器为单个单元的方式<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-return_types-min_max_result.html"><span class="t-lines"><span>ranges::min_max_result</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提供存储二个同类型对象或引用为单个单元的方式<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-return_types-in_found_result.html"><span class="t-lines"><span>ranges::in_found_result</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提供存储一个迭代器与一个布尔标志为单个单元的方式<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E5.87.BD.E6.95.B0">函数</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E4.B8.8D.E4.BF.AE.E6.94.B9.E5.BA.8F.E5.88.97.E7.9A.84.E6.93.8D.E4.BD.9C">不修改序列的操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-all_any_none_of.html"><span class="t-lines"><span>all_of</span><span>any_of</span><span>none_of</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>检查谓词是否对范围中所有、任一或无元素为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span><br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-for_each.html"><span class="t-lines"><span>for_each</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>应用函数到范围中的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-for_each_n.html"><span class="t-lines"><span>for_each_n</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>应用一个函数对象到序列的前 n 个元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-count.html"><span class="t-lines"><span>count</span><span>count_if</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回满足指定判别标准的元素数<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-mismatch.html"><span class="t-lines"><span>mismatch</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>寻找两个范围出现不同的首个位置<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-find.html"><span class="t-lines"><span>find</span><span>find_if</span><span>find_if_not</span></span></a></div>
|
|
<div><span class="t-lines"><span></span><span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>寻找首个满足特定判别标准的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-find_end.html"><span class="t-lines"><span>find_end</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>在特定范围中寻找最后出现的元素序列<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-find_first_of.html"><span class="t-lines"><span>find_first_of</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>搜索元素集合中的任意元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-adjacent_find.html"><span class="t-lines"><span>adjacent_find</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>查找首对相邻的相同(或满足给定谓词的)元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-search.html"><span class="t-lines"><span>search</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>搜索一个元素范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-search_n.html"><span class="t-lines"><span>search_n</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>在范围中搜索一定量的某个元素的连续副本<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E4.BF.AE.E6.94.B9.E5.BA.8F.E5.88.97.E7.9A.84.E6.93.8D.E4.BD.9C">修改序列的操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-copy.html"><span class="t-lines"><span>copy</span><span>copy_if</span></span></a></div>
|
|
<div><span class="t-lines"><span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将某一范围的元素复制到一个新的位置<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-copy_n.html"><span class="t-lines"><span>copy_n</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将一定数目的元素复制到一个新的位置<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-copy_backward.html"><span class="t-lines"><span>copy_backward</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>按从后往前的顺序复制一个范围内的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-move.html"><span class="t-lines"><span>move</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将某一范围的元素移动到一个新的位置<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-move_backward.html"><span class="t-lines"><span>move_backward</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>按从后往前的顺序移动某一范围的元素到新的位置<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-fill.html"><span class="t-lines"><span>fill</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个给定值复制赋值给一个范围内的每个元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-fill_n.html"><span class="t-lines"><span>fill_n</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个给定值复制赋值给一个范围内的 N 个元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-transform.html"><span class="t-lines"><span>transform</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个函数应用于某一范围的各个元素,并在目标范围存储结果<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-generate.html"><span class="t-lines"><span>generate</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将相继的函数调用结果赋值给一个范围中的每个元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-generate_n.html"><span class="t-lines"><span>generate_n</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将相继的函数调用结果赋值给一个范围中的 N 个元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-remove.html"><span class="t-lines"><span>remove</span><span>remove_if</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>移除满足特定判别标准的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-remove_copy.html"><span class="t-lines"><span>remove_copy</span><span>remove_copy_if</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>复制一个范围的元素,忽略满足特定判别标准的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-replace.html"><span class="t-lines"><span>replace</span><span>replace_if</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将所有满足特定判别标准的值替换为另一个值<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-replace_copy.html"><span class="t-lines"><span>replace_copy</span><span>replace_copy_if</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>复制一个范围内的元素,并将满足特定判别标准的元素替换为另一个值<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-swap.html"><span class="t-lines"><span>swap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>交换两个对象的值<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-swap_ranges.html"><span class="t-lines"><span>swap_ranges</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>交换两个范围的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-iter_swap.html"><span class="t-lines"><span>iter_swap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>交换两个迭代器所指向的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-reverse.html"><span class="t-lines"><span>reverse</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>逆转范围中的元素顺序<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-reverse_copy.html"><span class="t-lines"><span>reverse_copy</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>创建一个范围的逆向副本<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-rotate.html"><span class="t-lines"><span>rotate</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>旋转范围中的元素顺序<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-rotate_copy.html"><span class="t-lines"><span>rotate_copy</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>复制并旋转元素范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-shift.html"><span class="t-lines"><span>shift_left</span><span>shift_right</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>迁移范围中的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-random_shuffle.html"><span class="t-lines"><span>random_shuffle</span><span>shuffle</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>随机重排范围中的元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-sample.html"><span class="t-lines"><span>sample</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>从一个序列中随机选择 n 个元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-unique.html"><span class="t-lines"><span>unique</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>移除范围内的连续重复元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-unique_copy.html"><span class="t-lines"><span>unique_copy</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>创建某范围的不含连续重复元素的副本<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.88.92.E5.88.86.E6.93.8D.E4.BD.9C">划分操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-is_partitioned.html"><span class="t-lines"><span>is_partitioned</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>判断范围是否已按给定的谓词划分<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-partition.html"><span class="t-lines"><span>partition</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将范围中的元素分为两组<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-partition_copy.html"><span class="t-lines"><span>partition_copy</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>复制一个范围,将各元素分为两组<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-stable_partition.html"><span class="t-lines"><span>stable_partition</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将元素分为两组,同时保留其相对顺序<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-partition_point.html"><span class="t-lines"><span>partition_point</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>定位已划分范围的划分点<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.8E.92.E5.BA.8F.E6.93.8D.E4.BD.9C">排序操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-is_sorted.html"><span class="t-lines"><span>is_sorted</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>检查范围是否已按升序排列<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-is_sorted_until.html"><span class="t-lines"><span>is_sorted_until</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>找出最大的已排序子范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-sort.html"><span class="t-lines"><span>sort</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将范围按升序排序<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-partial_sort.html"><span class="t-lines"><span>partial_sort</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>排序一个范围的前 N 个元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-partial_sort_copy.html"><span class="t-lines"><span>partial_sort_copy</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>对范围内的元素进行复制并部分排序<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-stable_sort.html"><span class="t-lines"><span>stable_sort</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将范围内的元素排序,同时保持相等的元素之间的顺序<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-nth_element.html"><span class="t-lines"><span>nth_element</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将给定的范围部分排序,确保其按给定元素划分<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".EF.BC.88.E5.B7.B2.E6.8E.92.E5.BA.8F.E8.8C.83.E5.9B.B4.E4.B8.8A.E7.9A.84.EF.BC.89.E4.BA.8C.E5.88.86.E6.90.9C.E7.B4.A2.E6.93.8D.E4.BD.9C">(已排序范围上的)二分搜索操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-lower_bound.html"><span class="t-lines"><span>lower_bound</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回指向第一个<i>不小于</i>给定值的元素的迭代器<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-upper_bound.html"><span class="t-lines"><span>upper_bound</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回指向第一个<i>大于</i>给定值的元素的迭代器<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-binary_search.html"><span class="t-lines"><span>binary_search</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>确定元素是否存在于某范围中<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-equal_range.html"><span class="t-lines"><span>equal_range</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回匹配特定键值的元素范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.85.B6.E4.BB.96.E5.B7.B2.E6.8E.92.E5.BA.8F.E8.8C.83.E5.9B.B4.E4.B8.8A.E7.9A.84.E6.93.8D.E4.BD.9C">其他已排序范围上的操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-merge.html"><span class="t-lines"><span>merge</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>归并两个已排序的范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-inplace_merge.html"><span class="t-lines"><span>inplace_merge</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>就地归并两个有序范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".EF.BC.88.E5.B7.B2.E6.8E.92.E5.BA.8F.E8.8C.83.E5.9B.B4.E4.B8.8A.E7.9A.84.EF.BC.89.E9.9B.86.E5.90.88.E6.93.8D.E4.BD.9C">(已排序范围上的)集合操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-includes.html"><span class="t-lines"><span>includes</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>若一个序列是另一个的子列则返回 true<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-set_difference.html"><span class="t-lines"><span>set_difference</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的差集<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-set_intersection.html"><span class="t-lines"><span>set_intersection</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的交集<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-set_symmetric_difference.html"><span class="t-lines"><span>set_symmetric_difference</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的对称差<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-set_union.html"><span class="t-lines"><span>set_union</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的并集<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.A0.86.E6.93.8D.E4.BD.9C">堆操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-is_heap.html"><span class="t-lines"><span>is_heap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>检查给定范围是否为一个最大堆<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-is_heap_until.html"><span class="t-lines"><span>is_heap_until</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>查找能成为最大堆的最大子范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-make_heap.html"><span class="t-lines"><span>make_heap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>从一个元素范围创建出一个最大堆<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-push_heap.html"><span class="t-lines"><span>push_heap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个元素加入到一个最大堆<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-pop_heap.html"><span class="t-lines"><span>pop_heap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>从最大堆中移除最大元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-sort_heap.html"><span class="t-lines"><span>sort_heap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个最大堆变成一个按升序排序的元素范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.9C.80.E5.B0.8F.2F.E6.9C.80.E5.A4.A7.E6.93.8D.E4.BD.9C">最小/最大操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-max.html"><span class="t-lines"><span>max</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回各给定值中的较大者<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-max_element.html"><span class="t-lines"><span>max_element</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回范围内的最大元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-min.html"><span class="t-lines"><span>min</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回各给定值中的较小者<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-min_element.html"><span class="t-lines"><span>min_element</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回范围内的最小元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-minmax.html"><span class="t-lines"><span>minmax</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回两个元素的较小和较大者<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-minmax_element.html"><span class="t-lines"><span>minmax_element</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回范围内的最小元素和最大元素<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-clamp.html"><span class="t-lines"><span>clamp</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>在一对边界值间夹逼一个值<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.AF.94.E8.BE.83.E6.93.8D.E4.BD.9C">比较操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-equal.html"><span class="t-lines"><span>equal</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>确定两个元素集合是否是相同的<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-lexicographical_compare.html"><span class="t-lines"><span>lexicographical_compare</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>当一个范围按字典顺序小于另一个范围时,返回 true<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-lexicographical_compare_three_way.html"><span class="t-lines"><span>lexicographical_compare_three_way</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>用三路比较比较两个范围<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.8E.92.E5.88.97.E6.93.8D.E4.BD.9C">排列操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-is_permutation.html"><span class="t-lines"><span>is_permutation</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>判断一个序列是否为另一个序列的排列<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-next_permutation.html"><span class="t-lines"><span>next_permutation</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>产生某个元素范围的按字典顺序的下一个较大的排列<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-prev_permutation.html"><span class="t-lines"><span>prev_permutation</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>产生某个元素范围的按字典顺序的下一个较小的排列<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E4.BB.BF.E5.87.BD.E6.95.B0.E5.AE.9E.E4.BD.93">仿函数实体</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于命名空间 <code>std::ranges</code></div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E4.B8.8D.E4.BF.AE.E6.94.B9.E5.BA.8F.E5.88.97.E7.9A.84.E6.93.8D.E4.BD.9C_2">不修改序列的操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-all_any_none_of.html"><span class="t-lines"><span>ranges::all_of</span><span>ranges::any_of</span><span>ranges::none_of</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>检查谓词是否对范围中所有、任一或无元素为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span><br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-for_each.html"><span class="t-lines"><span>ranges::for_each</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>应用函数到范围中的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-for_each_n.html"><span class="t-lines"><span>ranges::for_each_n</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>应用函数对象到序列的首 n 个元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-count.html"><span class="t-lines"><span>ranges::count</span><span>ranges::count_if</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回满足指定判别标准的元素数<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-mismatch.html"><span class="t-lines"><span>ranges::mismatch</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>寻找两个范围出现不同的首个位置<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-find.html"><span class="t-lines"><span>ranges::find</span><span>ranges::find_if</span><span>ranges::find_if_not</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>寻找首个满足特定判别标准的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-find_end.html"><span class="t-lines"><span>ranges::find_end</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>在特定范围中寻找最后出现的元素序列<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-find_first_of.html"><span class="t-lines"><span>ranges::find_first_of</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>搜索元素集合中的任一元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-adjacent_find.html"><span class="t-lines"><span>ranges::adjacent_find</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>查找首对相邻的相同(或满足给定谓词的)元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-search.html"><span class="t-lines"><span>ranges::search</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>搜索一个元素范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-search_n.html"><span class="t-lines"><span>ranges::search_n</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>在范围中搜索一定量的某个元素的连续副本<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-starts_with.html"><span class="t-lines"><span>ranges::starts_with</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx23">(C++23)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>检查一个范围是否始于另一范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-ends_with.html"><span class="t-lines"><span>ranges::ends_with</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx23">(C++23)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>检查一个范围是否终于另一范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E4.BF.AE.E6.94.B9.E5.BA.8F.E5.88.97.E7.9A.84.E6.93.8D.E4.BD.9C_2">修改序列的操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-copy.html"><span class="t-lines"><span>ranges::copy</span><span>ranges::copy_if</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将某一范围的元素复制到一个新的位置<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-copy_n.html"><span class="t-lines"><span>ranges::copy_n</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将一定数目的元素复制到一个新的位置<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-copy_backward.html"><span class="t-lines"><span>ranges::copy_backward</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>按从后往前的顺序复制一个范围内的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-move.html"><span class="t-lines"><span>ranges::move</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将某一范围的元素移动到一个新的位置<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-move_backward.html"><span class="t-lines"><span>ranges::move_backword</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>按从后往前的顺序移动某一范围的元素到新的位置<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-fill.html"><span class="t-lines"><span>ranges::fill</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个给定值复制赋值给一个范围内的每个元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-fill_n.html"><span class="t-lines"><span>ranges::fill_n</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个值复制赋值给一定量的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-transform.html"><span class="t-lines"><span>ranges::transform</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个函数应用于某一范围的各个元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-generate.html"><span class="t-lines"><span>ranges::generate</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>保存函数结果到一个范围中<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-generate_n.html"><span class="t-lines"><span>ranges::generate_n</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>保存 N 次函数应用的结果<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-remove.html"><span class="t-lines"><span>ranges::remove</span><span>ranges::remove_if</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>移除满足特定判别标准的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-remove_copy.html"><span class="t-lines"><span>ranges::remove_copy</span><span>ranges::remove_copy_if</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>复制一个范围的元素,忽略满足特定判别标准的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-replace.html"><span class="t-lines"><span>ranges::replace</span><span>ranges::replace_if</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将所有满足特定判别标准的值替换为另一个值<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-replace_copy.html"><span class="t-lines"><span>ranges::replace_copy</span><span>ranges::replace_copy_if</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>复制一个范围内的元素,并将满足特定判别标准的元素替换为另一个值<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-swap_ranges.html"><span class="t-lines"><span>ranges::swap_ranges</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>交换两个范围的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-reverse.html"><span class="t-lines"><span>ranges::reverse</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>逆转范围中的元素顺序<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-reverse_copy.html"><span class="t-lines"><span>ranges::revserse_copy</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>创建一个范围的逆向副本<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-rotate.html"><span class="t-lines"><span>ranges::rotate</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>旋转范围中的元素顺序<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-rotate_copy.html"><span class="t-lines"><span>ranges::rotate_copy</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>复制并旋转元素范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-sample.html"><span class="t-lines"><span>ranges::sample</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>从序列中随机选择 n 个元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-shuffle.html"><span class="t-lines"><span>ranges::shuffle</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>随机重排范围中的元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-unique.html"><span class="t-lines"><span>ranges::unique</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>移除范围中的连续重复元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-unique_copy.html"><span class="t-lines"><span>ranges::unique_copy</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>创建某范围的不含连续重复元素的副本<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.88.92.E5.88.86.E6.93.8D.E4.BD.9C_2">划分操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-is_partitioned.html"><span class="t-lines"><span>ranges::is_partitioned</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>判断范围是否已按给定的谓词划分<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-partition.html"><span class="t-lines"><span>ranges::partition</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将范围中的元素分为二组<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-partition_copy.html"><span class="t-lines"><span>ranges::partition_copy</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>复制一个范围,将各元素分为二组<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-stable_partition.html"><span class="t-lines"><span>ranges::stable_partition</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将元素分成二组,同时保持其相对顺序<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-partition_point.html"><span class="t-lines"><span>ranges::partition_point</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>定位已划分范围的划分点<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.8E.92.E5.BA.8F.E6.93.8D.E4.BD.9C_2">排序操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-is_sorted.html"><span class="t-lines"><span>ranges::is_sorted</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>检查范围是否以升序排序<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-is_sorted_until.html"><span class="t-lines"><span>ranges::is_sorted_until</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>寻找最大的已排序子范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-sort.html"><span class="t-lines"><span>ranges::sort</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将范围按升序排序<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-partial_sort.html"><span class="t-lines"><span>ranges::partial_sort</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>排序一个范围的前 N 个元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-partial_sort_copy.html"><span class="t-lines"><span>ranges::partial_sort_copy</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>对范围内的元素进行复制并部分排序<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-stable_sort.html"><span class="t-lines"><span>ranges::stable_sort</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将范围内的元素排序,同时保持相等的元素之间的顺序<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-nth_element.html"><span class="t-lines"><span>ranges::nth_element</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将给定的范围部分排序,确保其按给定元素划分<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".EF.BC.88.E5.B7.B2.E6.8E.92.E5.BA.8F.E8.8C.83.E5.9B.B4.E4.B8.8A.E7.9A.84.EF.BC.89.E9.9B.86.E5.90.88.E6.93.8D.E4.BD.9C_2">(已排序范围上的)集合操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-lower_bound.html"><span class="t-lines"><span>ranges::lower_bound</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回指向首个<i>不小于</i>给定值的元素的迭代器<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-upper_bound.html"><span class="t-lines"><span>ranges::upper_bound</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回指向首个<i>大于</i>某值的元素的迭代器<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-binary_search.html"><span class="t-lines"><span>ranges::binary_search</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>确定元素是否存在于某范围中<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-equal_range.html"><span class="t-lines"><span>ranges::equal_ranges</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回匹配特定值的元素范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.85.B6.E4.BB.96.E5.B7.B2.E6.8E.92.E5.BA.8F.E8.8C.83.E5.9B.B4.E4.B8.8A.E7.9A.84.E6.93.8D.E4.BD.9C_2">其他已排序范围上的操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-merge.html"><span class="t-lines"><span>ranges::merge</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>归并二个已排序范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-inplace_merge.html"><span class="t-lines"><span>ranges::inplace_merge</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>在原位归并两个有序范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".EF.BC.88.E5.B7.B2.E6.8E.92.E5.BA.8F.E8.8C.83.E5.9B.B4.E4.B8.8A.E7.9A.84.EF.BC.89.E9.9B.86.E5.90.88.E6.93.8D.E4.BD.9C_3">(已排序范围上的)集合操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-includes.html"><span class="t-lines"><span>ranges::includes</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>若一个序列是另一个的子列则返回 <code>true</code><br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-set_difference.html"><span class="t-lines"><span>ranges::set_difference</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的差集<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-set_intersection.html"><span class="t-lines"><span>ranges::set_intersection</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的交集<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-set_symmetric_difference.html"><span class="t-lines"><span>ranges::set_symmetric_difference</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的对称差<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-set_union.html"><span class="t-lines"><span>ranges::set_union</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>计算两个集合的并集<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.A0.86.E6.93.8D.E4.BD.9C_2">堆操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-is_heap.html"><span class="t-lines"><span>ranges::is_heap</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>检查给定范围是否为最大堆<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-is_heap_until.html"><span class="t-lines"><span>ranges::is_heap_until</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>寻找能成为最大堆的最大子范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-make_heap.html"><span class="t-lines"><span>ranges::make_heap</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>从一个元素范围创建出一个最大堆<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-push_heap.html"><span class="t-lines"><span>ranges::push_heap</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个元素加入到一个最大堆<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-pop_heap.html"><span class="t-lines"><span>ranges::pop_heap</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>从最大堆中移除最大元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-sort_heap.html"><span class="t-lines"><span>ranges::sort_heap</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>将一个最大堆变成一个按升序排序的元素范围<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.9C.80.E5.B0.8F.2F.E6.9C.80.E5.A4.A7.E6.93.8D.E4.BD.9C_2">最小/最大操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-max.html"><span class="t-lines"><span>ranges::max</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回给定值的较大者<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-max_element.html"><span class="t-lines"><span>ranges::max_element</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回范围中的最大元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-min.html"><span class="t-lines"><span>ranges::min</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回给定值的较小者<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-min_element.html"><span class="t-lines"><span>ranges::min_element</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回范围中的最小元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-minmax.html"><span class="t-lines"><span>ranges::minmax</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回两个元素的较小和较大者<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-minmax_element.html"><span class="t-lines"><span>ranges::minmax_element</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>返回范围中的最小和最大元素<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-clamp.html"><span class="t-lines"><span>ranges::clamp</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>在一对边界值间夹一个值<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.AF.94.E8.BE.83.E6.93.8D.E4.BD.9C_2">比较操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-equal.html"><span class="t-lines"><span>ranges::equal</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>确定两个元素集合是否是相同的<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-lexicographical_compare.html"><span class="t-lines"><span>ranges::lexicographical_compare</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>当一个范围按字典顺序小于另一个范围时,返回 true<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.8E.92.E5.88.97.E6.93.8D.E4.BD.9C_2">排列操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-is_permutation.html"><span class="t-lines"><span>ranges::is_permutation</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>确定一个序列是否为另一序列的重排<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-algorithm-ranges-next_permutation.html"><span class="t-lines"><span>ranges::next_permutation</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>产生某个元素范围的按字典序下一个较大的排列<br />
|
|
<span class="t-mark">(niebloid)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.A6.82.E8.A6.81">概要</span></h3>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <initializer_list></span>
|
|
|
|
<span class="kw1">namespace</span> std <span class="br0">{</span>
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="co1">// 算法结果类型</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> F<span class="sy1">></span> <span class="kw1">struct</span> in_fun_result<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">></span> <span class="kw1">struct</span> in_in_result<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span> <span class="kw1">struct</span> in_out_result<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> O<span class="sy1">></span> <span class="kw1">struct</span> in_in_out_result<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O1, <span class="kw1">class</span> O2<span class="sy1">></span> <span class="kw1">struct</span> in_out_out_result<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> <span class="kw1">struct</span> min_max_result<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span> <span class="kw1">struct</span> in_found_result<span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 不修改序列的操作</span>
|
|
<span class="co1">// 全部</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> all_of<span class="br0">(</span>InputIter first, InputIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">bool</span> all_of<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> all_of<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> all_of<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 任何</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> any_of<span class="br0">(</span>InputIter first, InputIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">bool</span> any_of<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> any_of<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> any_of<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 无一</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> none_of<span class="br0">(</span>InputIter first, InputIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">bool</span> none_of<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> none_of<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> none_of<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 对每个</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Function<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> Function for_each<span class="br0">(</span>InputIter first, InputIter last, Function f<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Function<span class="sy1">></span>
|
|
<span class="kw4">void</span> for_each<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, Function f<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> F<span class="sy1">></span>
|
|
<span class="kw1">using</span> for_each_result <span class="sy1">=</span> in_fun_result<span class="sy1"><</span>I, F<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirectly_unary_invocable<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Fun<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> for_each_result<span class="sy1"><</span>I, Fun<span class="sy1">></span>
|
|
for_each<span class="br0">(</span>I first, S last, Fun f, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirectly_unary_invocable<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Fun<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> for_each_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Fun<span class="sy1">></span>
|
|
for_each<span class="br0">(</span>R<span class="sy3">&&</span> r, Fun f, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> Function<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> InputIter for_each_n<span class="br0">(</span>InputIter first, Size n, Function f<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> Function<span class="sy1">></span>
|
|
ForwardIter for_each_n<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, Size n, Function f<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> F<span class="sy1">></span>
|
|
<span class="kw1">using</span> for_each_n_result <span class="sy1">=</span> in_fun_result<span class="sy1"><</span>I, F<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirectly_unary_invocable<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Fun<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> for_each_n_result<span class="sy1"><</span>I, Fun<span class="sy1">></span>
|
|
for_each_n<span class="br0">(</span>I first, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n, Fun f, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 寻找</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> InputIter find<span class="br0">(</span>InputIter first, InputIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
ForwardIter find<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> InputIter find_if<span class="br0">(</span>InputIter first, InputIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
ForwardIter find_if<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> InputIter find_if_not<span class="br0">(</span>InputIter first, InputIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
ForwardIter find_if_not<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I find<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
find<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I find_if<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
find_if<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I find_if_not<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
find_if_not<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 寻找末尾</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter1
|
|
find_end<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter1
|
|
find_end<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter1
|
|
find_end<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1,
|
|
<span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
ForwardIter1
|
|
find_end<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, forward_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>I1, I2, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I1<span class="sy1">></span>
|
|
find_end<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R1, forward_range R2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R1<span class="sy1">></span>
|
|
find_end<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 寻找首个</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> InputIter
|
|
find_first_of<span class="br0">(</span>InputIter first1, InputIter last1,
|
|
ForwardIter first2, ForwardIter last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> InputIter
|
|
find_first_of<span class="br0">(</span>InputIter first1, InputIter last1,
|
|
ForwardIter first2, ForwardIter last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter1
|
|
find_first_of<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1,
|
|
<span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
ForwardIter1
|
|
find_first_of<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, forward_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>I1, I2, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I1 find_first_of<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, forward_range R2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>
|
|
find_first_of<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 寻找毗邻</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
adjacent_find<span class="br0">(</span>ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
adjacent_find<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
adjacent_find<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
ForwardIter
|
|
adjacent_find<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_binary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I adjacent_find<span class="br0">(</span>I first, S last, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_binary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
adjacent_find<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 计数</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>InputIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span>
|
|
count<span class="br0">(</span>InputIter first, InputIter last, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>ForwardIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span>
|
|
count<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>InputIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span>
|
|
count_if<span class="br0">(</span>InputIter first, InputIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>ForwardIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span>
|
|
count_if<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span>
|
|
count<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> range_difference_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
count<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span>
|
|
count_if<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> range_difference_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
count_if<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 不匹配</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>InputIter1, InputIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>InputIter1, InputIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>InputIter1, InputIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>InputIter1, InputIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
pair<span class="sy1"><</span>ForwardIter1, ForwardIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
pair<span class="sy1"><</span>ForwardIter1, ForwardIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
pair<span class="sy1"><</span>ForwardIter1, ForwardIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
pair<span class="sy1"><</span>ForwardIter1, ForwardIter2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">></span>
|
|
<span class="kw1">using</span> mismatch_result <span class="sy1">=</span> in_in_result<span class="sy1"><</span>I1, I2<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>I1, I2, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> mismatch_result<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
mismatch<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> mismatch_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">>></span>
|
|
mismatch<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 相等</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> equal<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> equal<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> equal<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> equal<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">bool</span> equal<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">bool</span> equal<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">bool</span> equal<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">bool</span> equal<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>I1, I2, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> equal<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2,
|
|
Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, <span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> equal<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 为排列</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_permutation<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_permutation<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_permutation<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_permutation<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, forward_iterator I2,
|
|
sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity,
|
|
indirect_equivalence_relation<span class="sy1"><</span>projected<span class="sy1"><</span>I1, Proj1<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>I2, Proj2<span class="sy1">>></span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_permutation<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2,
|
|
Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R1, forward_range R2,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity,
|
|
indirect_equivalence_relation<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, Proj1<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Proj2<span class="sy1">>></span>
|
|
Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_permutation<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 搜索</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter1
|
|
search<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter1
|
|
search<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter1
|
|
search<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
ForwardIter1
|
|
search<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, forward_iterator I2,
|
|
sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2, <span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>I1, I2, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I1<span class="sy1">></span>
|
|
search<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R1, forward_range R2, <span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R1<span class="sy1">></span>
|
|
search<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
search_n<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Size count, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> T, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
search_n<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Size count, <span class="kw4">const</span> T<span class="sy3">&</span> value, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
ForwardIter
|
|
search_n<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Size count, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> T,
|
|
<span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
ForwardIter
|
|
search_n<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Size count, <span class="kw4">const</span> T<span class="sy3">&</span> value,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>I, <span class="kw4">const</span> T<span class="sy2">*</span>, Pred, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I<span class="sy1">></span>
|
|
search_n<span class="br0">(</span>I first, S last, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> count,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span>, Pred, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
search_n<span class="br0">(</span>R<span class="sy3">&&</span> r, range_difference_t<span class="sy1"><</span>R<span class="sy1">></span> count,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Searcher<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
search<span class="br0">(</span>ForwardIter first, ForwardIter last, <span class="kw4">const</span> Searcher<span class="sy3">&</span> searcher<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="co1">// 始于</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>I1, I2, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> starts_with<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, <span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> starts_with<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 终于</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires <span class="br0">(</span>forward_iterator<span class="sy1"><</span>I1<span class="sy1">></span> <span class="sy3">||</span> sized_sentinel_for<span class="sy1"><</span>S1, I1<span class="sy1">></span><span class="br0">)</span> <span class="sy3">&&</span>
|
|
<span class="br0">(</span>forward_iterator<span class="sy1"><</span>I2<span class="sy1">></span> <span class="sy3">||</span> sized_sentinel_for<span class="sy1"><</span>S2, I2<span class="sy1">></span><span class="br0">)</span> <span class="sy3">&&</span>
|
|
indirectly_comparable<span class="sy1"><</span>I1, I2, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> ends_with<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, <span class="kw1">class</span> Pred <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires <span class="br0">(</span>forward_range<span class="sy1"><</span>R1<span class="sy1">></span> <span class="sy3">||</span> sized_range<span class="sy1"><</span>R1<span class="sy1">></span><span class="br0">)</span> <span class="sy3">&&</span>
|
|
<span class="br0">(</span>forward_range<span class="sy1"><</span>R2<span class="sy1">></span> <span class="sy3">||</span> sized_range<span class="sy1"><</span>R2<span class="sy1">></span><span class="br0">)</span> <span class="sy3">&&</span>
|
|
indirectly_comparable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Pred, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> ends_with<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Pred pred <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 修改序列的操作</span>
|
|
<span class="co1">// 复制</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter2 copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> copy_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> copy_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
copy<span class="br0">(</span>I first, S last, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
copy<span class="br0">(</span>R<span class="sy3">&&</span> r, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter copy_n<span class="br0">(</span>InputIter first, Size n,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> Size,
|
|
<span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter2 copy_n<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, Size n,
|
|
ForwardIter2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> copy_n_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> copy_n_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
copy_n<span class="br0">(</span>I first, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter copy_if<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
ForwardIter2 copy_if<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> copy_if_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> copy_if_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
copy_if<span class="br0">(</span>I first, S last, O result, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> copy_if_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
copy_if<span class="br0">(</span>R<span class="sy3">&&</span> r, O result, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter1, <span class="kw1">class</span> BidirectionalIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> BidirectionalIter2
|
|
copy_backward<span class="br0">(</span>BidirectionalIter1 first, BidirectionalIter1 last,
|
|
BidirectionalIter2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">></span>
|
|
<span class="kw1">using</span> copy_backward_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I1, I2<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, bidirectional_iterator I2<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> copy_backward_result<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
copy_backward<span class="br0">(</span>I1 first, S1 last, I2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R, bidirectional_iterator I<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> copy_backward_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, I<span class="sy1">></span>
|
|
copy_backward<span class="br0">(</span>R<span class="sy3">&&</span> r, I result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 移动</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter move<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1,
|
|
<span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter2 move<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> move_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_movable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
move<span class="br0">(</span>I first, S last, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_movable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
move<span class="br0">(</span>R<span class="sy3">&&</span> r, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter1, <span class="kw1">class</span> BidirectionalIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> BidirectionalIter2
|
|
move_backward<span class="br0">(</span>BidirectionalIter1 first, BidirectionalIter1 last,
|
|
BidirectionalIter2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">></span>
|
|
<span class="kw1">using</span> move_backward_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I1, I2<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, bidirectional_iterator I2<span class="sy1">></span>
|
|
requires indirectly_movable<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_backward_result<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
move_backward<span class="br0">(</span>I1 first, S1 last, I2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R, bidirectional_iterator I<span class="sy1">></span>
|
|
requires indirectly_movable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_backward_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, I<span class="sy1">></span>
|
|
move_backward<span class="br0">(</span>R<span class="sy3">&&</span> r, I result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 交换</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter2 swap_ranges<span class="br0">(</span>ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter2 swap_ranges<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">></span>
|
|
<span class="kw1">using</span> swap_ranges_result <span class="sy1">=</span> in_in_result<span class="sy1"><</span>I1, I2<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2<span class="sy1">></span>
|
|
requires indirectly_swappable<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> swap_ranges_result<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
swap_ranges<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2<span class="sy1">></span>
|
|
requires indirectly_swappable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> swap_ranges_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">>></span>
|
|
swap_ranges<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> iter_swap<span class="br0">(</span>ForwardIter1 a, ForwardIter2 b<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 变换</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> UnaryOperation<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
transform<span class="br0">(</span>InputIter first1, InputIter last1,
|
|
OutputIter result, UnaryOperation op<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter,
|
|
<span class="kw1">class</span> BinaryOperation<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
transform<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, OutputIter result,
|
|
BinaryOperation binary_op<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> UnaryOperation<span class="sy1">></span>
|
|
ForwardIter2
|
|
transform<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 result, UnaryOperation op<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> BinaryOperation<span class="sy1">></span>
|
|
ForwardIter
|
|
transform<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter result,
|
|
BinaryOperation binary_op<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> unary_transform_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O,
|
|
copy_constructible F, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>O, indirect_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">>>></span>
|
|
<span class="kw4">constexpr</span> unary_transform_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
transform<span class="br0">(</span>I first1, S last1, O result, F op, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O, copy_constructible F,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>O, indirect_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>>></span>
|
|
<span class="kw4">constexpr</span> unary_transform_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
transform<span class="br0">(</span>R<span class="sy3">&&</span> r, O result, F op, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> binary_transform_result <span class="sy1">=</span> in_in_out_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
weakly_incrementable O, copy_constructible F, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity,
|
|
<span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>O, indirect_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, projected<span class="sy1"><</span>I1, Proj1<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>I2, Proj2<span class="sy1">>>></span>
|
|
<span class="kw4">constexpr</span> binary_transform_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span>
|
|
transform<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, O result,
|
|
F binary_op, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, weakly_incrementable O,
|
|
copy_constructible F, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>O, indirect_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, Proj1<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Proj2<span class="sy1">>>></span>
|
|
<span class="kw4">constexpr</span> binary_transform_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O<span class="sy1">></span>
|
|
transform<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, O result,
|
|
F binary_op, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 替换</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> replace<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> old_value, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">void</span> replace<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> old_value, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> replace_if<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">void</span> replace_if<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T1, <span class="kw1">class</span> T2, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>I, <span class="kw4">const</span> T2<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">></span>, <span class="kw4">const</span> T1<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
replace<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T1<span class="sy3">&</span> old_value, <span class="kw4">const</span> T2<span class="sy3">&</span> new_value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> T1, <span class="kw1">class</span> T2, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, <span class="kw4">const</span> T2<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">></span>, <span class="kw4">const</span> T1<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
replace<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T1<span class="sy3">&</span> old_value, <span class="kw4">const</span> T2<span class="sy3">&</span> new_value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>I, <span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I replace_if<span class="br0">(</span>I first, S last, Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_writable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
replace_if<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter replace_copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> old_value, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
ForwardIter2 replace_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> old_value, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Pred, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter replace_copy_if<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result,
|
|
Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> Pred, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
ForwardIter2 replace_copy_if<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result,
|
|
Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> replace_copy_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T1, <span class="kw1">class</span> T2,
|
|
output_iterator<span class="sy1"><</span><span class="kw4">const</span> T2<span class="sy3">&</span><span class="sy1">></span> O, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">></span>, <span class="kw4">const</span> T1<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> replace_copy_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
replace_copy<span class="br0">(</span>I first, S last, O result, <span class="kw4">const</span> T1<span class="sy3">&</span> old_value, <span class="kw4">const</span> T2<span class="sy3">&</span> new_value,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> T1, <span class="kw1">class</span> T2, output_iterator<span class="sy1"><</span><span class="kw4">const</span> T2<span class="sy3">&</span><span class="sy1">></span> O,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">></span>, <span class="kw4">const</span> T1<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> replace_copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
replace_copy<span class="br0">(</span>R<span class="sy3">&&</span> r, O result, <span class="kw4">const</span> T1<span class="sy3">&</span> old_value, <span class="kw4">const</span> T2<span class="sy3">&</span> new_value,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> replace_copy_if_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, output_iterator<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> O,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity, indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> replace_copy_if_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
replace_copy_if<span class="br0">(</span>I first, S last, O result, Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> T, output_iterator<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> O, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> replace_copy_if_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
replace_copy_if<span class="br0">(</span>R<span class="sy3">&&</span> r, O result, Pred pred, <span class="kw4">const</span> T<span class="sy3">&</span> new_value,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 填充</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> fill<span class="br0">(</span>ForwardIter first, ForwardIter last, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">void</span> fill<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter fill_n<span class="br0">(</span>OutputIter first, Size n, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter,
|
|
<span class="kw1">class</span> Size, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
ForwardIter fill_n<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, Size n, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, output_iterator<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> O, sentinel_for<span class="sy1"><</span>O<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> O fill<span class="br0">(</span>O first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, output_range<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> R<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span> fill<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, output_iterator<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> O fill_n<span class="br0">(</span>O first, iter_difference_t<span class="sy1"><</span>O<span class="sy1">></span> n, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 生成</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Generator<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> generate<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Generator gen<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Generator<span class="sy1">></span>
|
|
<span class="kw4">void</span> generate<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Generator gen<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> Generator<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter generate_n<span class="br0">(</span>OutputIter first, Size n, Generator gen<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Size, <span class="kw1">class</span> Generator<span class="sy1">></span>
|
|
ForwardIter generate_n<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, Size n, Generator gen<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator O, sentinel_for<span class="sy1"><</span>O<span class="sy1">></span> S, copy_constructible F<span class="sy1">></span>
|
|
requires invocable<span class="sy1"><</span>F<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span> indirectly_writable<span class="sy1"><</span>O, invoke_result_t<span class="sy1"><</span>F<span class="sy3">&</span><span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> O generate<span class="br0">(</span>O first, S last, F gen<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> R, copy_constructible F<span class="sy1">></span>
|
|
requires invocable<span class="sy1"><</span>F<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span> output_range<span class="sy1"><</span>R, invoke_result_t<span class="sy1"><</span>F<span class="sy3">&</span><span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span> generate<span class="br0">(</span>R<span class="sy3">&&</span> r, F gen<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator O, copy_constructible F<span class="sy1">></span>
|
|
requires invocable<span class="sy1"><</span>F<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span> indirectly_writable<span class="sy1"><</span>O, invoke_result_t<span class="sy1"><</span>F<span class="sy3">&</span><span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> O generate_n<span class="br0">(</span>O first, iter_difference_t<span class="sy1"><</span>O<span class="sy1">></span> n, F gen<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 移除</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter remove<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
ForwardIter remove<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter remove_if<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
ForwardIter remove_if<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>permutable I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I<span class="sy1">></span> remove<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
remove<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>permutable I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I<span class="sy1">></span> remove_if<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
remove_if<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
remove_copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> T<span class="sy1">></span>
|
|
ForwardIter2
|
|
remove_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result, <span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
remove_copy_if<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
ForwardIter2
|
|
remove_copy_if<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> remove_copy_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O, <span class="kw1">class</span> T,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> remove_copy_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
remove_copy<span class="br0">(</span>I first, S last, O result, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_binary_predicate<span class="sy1"><</span>ranges<span class="sy4">::</span><span class="me2">equal_to</span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">></span>, <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> remove_copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
remove_copy<span class="br0">(</span>R<span class="sy3">&&</span> r, O result, <span class="kw4">const</span> T<span class="sy3">&</span> value, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> remove_copy_if_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity, indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> remove_copy_if_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
remove_copy_if<span class="br0">(</span>I first, S last, O result, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> remove_copy_if_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
remove_copy_if<span class="br0">(</span>R<span class="sy3">&&</span> r, O result, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 归一</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter unique<span class="br0">(</span>ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter unique<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter unique<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
ForwardIter unique<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>permutable I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_equivalence_relation<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> C <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I<span class="sy1">></span> unique<span class="br0">(</span>I first, S last, C comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_equivalence_relation<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> C <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
unique<span class="br0">(</span>R<span class="sy3">&&</span> r, C comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
unique_copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
unique_copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter result, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter2
|
|
unique_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> BinaryPred<span class="sy1">></span>
|
|
ForwardIter2
|
|
unique_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 last,
|
|
ForwardIter2 result, BinaryPred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> unique_copy_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_equivalence_relation<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> C <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
<span class="br0">(</span>forward_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">||</span>
|
|
<span class="br0">(</span>input_iterator<span class="sy1"><</span>O<span class="sy1">></span> <span class="sy3">&&</span> same_as<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>I<span class="sy1">></span>, iter_value_t<span class="sy1"><</span>O<span class="sy1">>></span><span class="br0">)</span> <span class="sy3">||</span>
|
|
indirectly_copyable_storable<span class="sy1"><</span>I, O<span class="sy1">></span><span class="br0">)</span>
|
|
<span class="kw4">constexpr</span> unique_copy_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
unique_copy<span class="br0">(</span>I first, S last, O result, C comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_equivalence_relation<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> C <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">equal_to</span><span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
<span class="br0">(</span>forward_iterator<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span> <span class="sy3">||</span>
|
|
<span class="br0">(</span>input_iterator<span class="sy1"><</span>O<span class="sy1">></span> <span class="sy3">&&</span> same_as<span class="sy1"><</span>range_value_t<span class="sy1"><</span>R<span class="sy1">></span>, iter_value_t<span class="sy1"><</span>O<span class="sy1">>></span><span class="br0">)</span> <span class="sy3">||</span>
|
|
indirectly_copyable_storable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span><span class="br0">)</span>
|
|
<span class="kw4">constexpr</span> unique_copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
unique_copy<span class="br0">(</span>R<span class="sy3">&&</span> r, O result, C comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 逆转</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> reverse<span class="br0">(</span>BidirectionalIter first, BidirectionalIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> BidirectionalIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> reverse<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
BidirectionalIter first, BidirectionalIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I reverse<span class="br0">(</span>I first, S last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span> reverse<span class="br0">(</span>R<span class="sy3">&&</span> r<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
reverse_copy<span class="br0">(</span>BidirectionalIter first, BidirectionalIter last,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
reverse_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
BidirectionalIter first, BidirectionalIter last,
|
|
ForwardIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> reverse_copy_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> reverse_copy_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
reverse_copy<span class="br0">(</span>I first, S last, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> reverse_copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
reverse_copy<span class="br0">(</span>R<span class="sy3">&&</span> r, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 旋转</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter rotate<span class="br0">(</span>ForwardIter first,
|
|
ForwardIter middle,
|
|
ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter rotate<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first,
|
|
ForwardIter middle,
|
|
ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>permutable I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I<span class="sy1">></span> rotate<span class="br0">(</span>I first, I middle, S last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span> rotate<span class="br0">(</span>R<span class="sy3">&&</span> r, iterator_t<span class="sy1"><</span>R<span class="sy1">></span> middle<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
rotate_copy<span class="br0">(</span>ForwardIter first, ForwardIter middle,
|
|
ForwardIter last, OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
ForwardIter2
|
|
rotate_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first, ForwardIter1 middle,
|
|
ForwardIter1 last, ForwardIter2 result<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> rotate_copy_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> rotate_copy_result<span class="sy1"><</span>I, O<span class="sy1">></span>
|
|
rotate_copy<span class="br0">(</span>I first, I middle, S last, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, weakly_incrementable O<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> rotate_copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span>
|
|
rotate_copy<span class="br0">(</span>R<span class="sy3">&&</span> r, iterator_t<span class="sy1"><</span>R<span class="sy1">></span> middle, O result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 采样</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> PopulationIter, <span class="kw1">class</span> SampleIter,
|
|
<span class="kw1">class</span> Distance, <span class="kw1">class</span> UniformRandomBitGenerator<span class="sy1">></span>
|
|
SampleIter sample<span class="br0">(</span>PopulationIter first, PopulationIter last,
|
|
SampleIter out, Distance n,
|
|
UniformRandomBitGenerator<span class="sy3">&&</span> g<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S,
|
|
weakly_incrementable O, <span class="kw1">class</span> Gen<span class="sy1">></span>
|
|
requires <span class="br0">(</span>forward_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">||</span> random_access_iterator<span class="sy1"><</span>O<span class="sy1">></span><span class="br0">)</span> <span class="sy3">&&</span>
|
|
indirectly_copyable<span class="sy1"><</span>I, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
uniform_random_bit_generator<span class="sy1"><</span>remove_reference_t<span class="sy1"><</span>Gen<span class="sy1">>></span>
|
|
O sample<span class="br0">(</span>I first, S last, O out, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n, Gen<span class="sy3">&&</span> g<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O, <span class="kw1">class</span> Gen<span class="sy1">></span>
|
|
requires <span class="br0">(</span>forward_range<span class="sy1"><</span>R<span class="sy1">></span> <span class="sy3">||</span> random_access_iterator<span class="sy1"><</span>O<span class="sy1">></span><span class="br0">)</span> <span class="sy3">&&</span>
|
|
indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O<span class="sy1">></span> <span class="sy3">&&</span>
|
|
uniform_random_bit_generator<span class="sy1"><</span>remove_reference_t<span class="sy1"><</span>Gen<span class="sy1">>></span>
|
|
O sample<span class="br0">(</span>R<span class="sy3">&&</span> r, O out, range_difference_t<span class="sy1"><</span>R<span class="sy1">></span> n, Gen<span class="sy3">&&</span> g<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 打乱</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> UniformRandomBitGenerator<span class="sy1">></span>
|
|
<span class="kw4">void</span> shuffle<span class="br0">(</span>RandomAccessIter first,
|
|
RandomAccessIter last,
|
|
UniformRandomBitGenerator<span class="sy3">&&</span> g<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Gen<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
uniform_random_bit_generator<span class="sy1"><</span>remove_reference_t<span class="sy1"><</span>Gen<span class="sy1">>></span>
|
|
I shuffle<span class="br0">(</span>I first, S last, Gen<span class="sy3">&&</span> g<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Gen<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
uniform_random_bit_generator<span class="sy1"><</span>remove_reference_t<span class="sy1"><</span>Gen<span class="sy1">>></span>
|
|
borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span> shuffle<span class="br0">(</span>R<span class="sy3">&&</span> r, Gen<span class="sy3">&&</span> g<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 迁移</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
shift_left<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>ForwardIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
shift_left<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
<span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>ForwardIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
shift_right<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>ForwardIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
shift_right<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
<span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>ForwardIter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 排序与相关操作</span>
|
|
<span class="co1">// 排序</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> sort<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> sort<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> sort<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">void</span> sort<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
sort<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
sort<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> stable_sort<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">void</span> stable_sort<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> stable_sort<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">void</span> stable_sort<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
I stable_sort<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
stable_sort<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> partial_sort<span class="br0">(</span>RandomAccessIter first, RandomAccessIter middle,
|
|
RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> partial_sort<span class="br0">(</span>RandomAccessIter first, RandomAccessIter middle,
|
|
RandomAccessIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> partial_sort<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter middle,
|
|
RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">void</span> partial_sort<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter middle,
|
|
RandomAccessIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
partial_sort<span class="br0">(</span>I first, I middle, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
partial_sort<span class="br0">(</span>R<span class="sy3">&&</span> r, iterator_t<span class="sy1"><</span>R<span class="sy1">></span> middle, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> RandomAccessIter
|
|
partial_sort_copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
RandomAccessIter result_first,
|
|
RandomAccessIter result_last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> RandomAccessIter
|
|
partial_sort_copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
RandomAccessIter result_first,
|
|
RandomAccessIter result_last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
RandomAccessIter
|
|
partial_sort_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
RandomAccessIter result_first,
|
|
RandomAccessIter result_last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> RandomAccessIter,
|
|
<span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
RandomAccessIter
|
|
partial_sort_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
RandomAccessIter result_first,
|
|
RandomAccessIter result_last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> partial_sort_copy_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1,
|
|
random_access_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I1, I2<span class="sy1">></span> <span class="sy3">&&</span> sortable<span class="sy1"><</span>I2, Comp, Proj2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_strict_weak_order<span class="sy1"><</span>Comp, projected<span class="sy1"><</span>I1, Proj1<span class="sy1">></span>, projected<span class="sy1"><</span>I2, Proj2<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> partial_sort_copy_result<span class="sy1"><</span>I1, I2<span class="sy1">></span>
|
|
partial_sort_copy<span class="br0">(</span>I1 first, S1 last, I2 result_first, S2 result_last,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, random_access_range R2, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Comp, Proj2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_strict_weak_order<span class="sy1"><</span>Comp, projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, Proj1<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Proj2<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> partial_sort_copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">>></span>
|
|
partial_sort_copy<span class="br0">(</span>R1<span class="sy3">&&</span> r, R2<span class="sy3">&&</span> result_r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_sorted<span class="br0">(</span>ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_sorted<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">bool</span> is_sorted<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">bool</span> is_sorted<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_sorted<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_sorted<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
is_sorted_until<span class="br0">(</span>ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
is_sorted_until<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
is_sorted_until<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter
|
|
is_sorted_until<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I is_sorted_until<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
is_sorted_until<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 第 N 元素</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> nth_element<span class="br0">(</span>RandomAccessIter first, RandomAccessIter nth,
|
|
RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> nth_element<span class="br0">(</span>RandomAccessIter first, RandomAccessIter nth,
|
|
RandomAccessIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> nth_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter nth,
|
|
RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">void</span> nth_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter nth,
|
|
RandomAccessIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
nth_element<span class="br0">(</span>I first, I nth, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
nth_element<span class="br0">(</span>R<span class="sy3">&&</span> r, iterator_t<span class="sy1"><</span>R<span class="sy1">></span> nth, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 二分搜索</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
lower_bound<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
lower_bound<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I lower_bound<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span>
|
|
ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
lower_bound<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
upper_bound<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
upper_bound<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I upper_bound<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span>
|
|
ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
upper_bound<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>ForwardIter, ForwardIter<span class="sy1">></span>
|
|
equal_range<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>ForwardIter, ForwardIter<span class="sy1">></span>
|
|
equal_range<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I<span class="sy1">></span>
|
|
equal_range<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span>
|
|
ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
equal_range<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span>
|
|
binary_search<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span>
|
|
binary_search<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
<span class="kw4">const</span> T<span class="sy3">&</span> value, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> binary_search<span class="br0">(</span>I first, S last, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span>
|
|
ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> binary_search<span class="br0">(</span>R<span class="sy3">&&</span> r, <span class="kw4">const</span> T<span class="sy3">&</span> value, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 划分</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_partitioned<span class="br0">(</span>InputIter first, InputIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">bool</span> is_partitioned<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_partitioned<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_partitioned<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter partition<span class="br0">(</span>ForwardIter first,
|
|
ForwardIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
ForwardIter partition<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first,
|
|
ForwardIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>permutable I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> subrange<span class="sy1"><</span>I<span class="sy1">></span>
|
|
partition<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
<span class="kw4">constexpr</span> borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
partition<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
BidirectionalIter stable_partition<span class="br0">(</span>BidirectionalIter first,
|
|
BidirectionalIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
BidirectionalIter stable_partition<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
BidirectionalIter first,
|
|
BidirectionalIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>I<span class="sy1">></span>
|
|
subrange<span class="sy1"><</span>I<span class="sy1">></span> stable_partition<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires permutable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
borrowed_subrange_t<span class="sy1"><</span>R<span class="sy1">></span> stable_partition<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> OutputIter1,
|
|
<span class="kw1">class</span> OutputIter2, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>OutputIter1, OutputIter2<span class="sy1">></span>
|
|
partition_copy<span class="br0">(</span>InputIter first, InputIter last,
|
|
OutputIter1 out_true, OutputIter2 out_false,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> ForwardIter1,
|
|
<span class="kw1">class</span> ForwardIter2, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
pair<span class="sy1"><</span>ForwardIter1, ForwardIter2<span class="sy1">></span>
|
|
partition_copy<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
ForwardIter1 out_true, ForwardIter2 out_false,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O1, <span class="kw1">class</span> O2<span class="sy1">></span>
|
|
<span class="kw1">using</span> partition_copy_result <span class="sy1">=</span> in_out_out_result<span class="sy1"><</span>I, O1, O2<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S,
|
|
weakly_incrementable O1, weakly_incrementable O2,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity, indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>I, O1<span class="sy1">></span> <span class="sy3">&&</span> indirectly_copyable<span class="sy1"><</span>I, O2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> partition_copy_result<span class="sy1"><</span>I, O1, O2<span class="sy1">></span>
|
|
partition_copy<span class="br0">(</span>I first, S last, O1 out_true, O2 out_false, Pred pred,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, weakly_incrementable O1, weakly_incrementable O2,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
requires indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O1<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_copyable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> partition_copy_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, O1, O2<span class="sy1">></span>
|
|
partition_copy<span class="br0">(</span>R<span class="sy3">&&</span> r, O1 out_true, O2 out_false, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter
|
|
partition_point<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Pred pred<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I partition_point<span class="br0">(</span>I first, S last, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_unary_predicate<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Pred<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
partition_point<span class="br0">(</span>R<span class="sy3">&&</span> r, Pred pred, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 归并</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
merge<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter,
|
|
<span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
merge<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
merge<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter
|
|
merge<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> merge_result <span class="sy1">=</span> in_in_out_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
weakly_incrementable O, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity,
|
|
<span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>I1, I2, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> merge_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span>
|
|
merge<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, O result,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, weakly_incrementable O, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> merge_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O<span class="sy1">></span>
|
|
merge<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, O result,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> inplace_merge<span class="br0">(</span>BidirectionalIter first,
|
|
BidirectionalIter middle,
|
|
BidirectionalIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">void</span> inplace_merge<span class="br0">(</span>BidirectionalIter first,
|
|
BidirectionalIter middle,
|
|
BidirectionalIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> BidirectionalIter<span class="sy1">></span>
|
|
<span class="kw4">void</span> inplace_merge<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
BidirectionalIter first,
|
|
BidirectionalIter middle,
|
|
BidirectionalIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">void</span> inplace_merge<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
BidirectionalIter first,
|
|
BidirectionalIter middle,
|
|
BidirectionalIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
I inplace_merge<span class="br0">(</span>I first, I middle, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
inplace_merge<span class="br0">(</span>R<span class="sy3">&&</span> r, iterator_t<span class="sy1"><</span>R<span class="sy1">></span> middle, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 集合操作</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> includes<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> includes<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">bool</span> includes<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">bool</span> includes<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I1, Proj1<span class="sy1">></span>, projected<span class="sy1"><</span>I2, Proj2<span class="sy1">>></span> Comp <span class="sy1">=</span>
|
|
ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> includes<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity,
|
|
<span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, Proj1<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Proj2<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> includes<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_union<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_union<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
set_union<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter
|
|
set_union<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> set_union_result <span class="sy1">=</span> in_in_out_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
weakly_incrementable O, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>I1, I2, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_union_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span>
|
|
set_union<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, O result, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, weakly_incrementable O,
|
|
<span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_union_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O<span class="sy1">></span>
|
|
set_union<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, O result, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_intersection<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_intersection<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
set_intersection<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter
|
|
set_intersection<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> set_intersection_result <span class="sy1">=</span> in_in_out_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
weakly_incrementable O, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>I1, I2, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_intersection_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span>
|
|
set_intersection<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, O result,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, weakly_incrementable O,
|
|
<span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_intersection_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O<span class="sy1">></span>
|
|
set_intersection<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, O result,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_difference<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_difference<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
set_difference<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter
|
|
set_difference<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> set_difference_result <span class="sy1">=</span> in_out_result<span class="sy1"><</span>I, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
weakly_incrementable O, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>I1, I2, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_difference_result<span class="sy1"><</span>I1, O<span class="sy1">></span>
|
|
set_difference<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, O result,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, weakly_incrementable O,
|
|
<span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_difference_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, O<span class="sy1">></span>
|
|
set_difference<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, O result,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_symmetric_difference<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> OutputIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> OutputIter
|
|
set_symmetric_difference<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
OutputIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter
|
|
set_symmetric_difference<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter
|
|
set_symmetric_difference<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
ForwardIter result, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">using</span> set_symmetric_difference_result <span class="sy1">=</span> in_in_out_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
weakly_incrementable O, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>I1, I2, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_symmetric_difference_result<span class="sy1"><</span>I1, I2, O<span class="sy1">></span>
|
|
set_symmetric_difference<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2, O result,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, weakly_incrementable O,
|
|
<span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires mergeable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O, Comp, Proj1, Proj2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> set_symmetric_difference_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>,
|
|
borrowed_iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, O<span class="sy1">></span>
|
|
set_symmetric_difference<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, O result, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 堆操作</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> push_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> push_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
push_heap<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
push_heap<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> pop_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> pop_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
pop_heap<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
pop_heap<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> make_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> make_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
make_heap<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
make_heap<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> sort_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> sort_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I
|
|
sort_heap<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
sort_heap<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_heap<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">bool</span> is_heap<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">bool</span> is_heap<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_heap<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_heap<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> RandomAccessIter
|
|
is_heap_until<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> RandomAccessIter
|
|
is_heap_until<span class="br0">(</span>RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter<span class="sy1">></span>
|
|
RandomAccessIter
|
|
is_heap_until<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> RandomAccessIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
RandomAccessIter
|
|
is_heap_until<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
RandomAccessIter first, RandomAccessIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I is_heap_until<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>random_access_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
is_heap_until<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 最小与最大</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> <span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> min<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> min<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> T min<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> t<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> T min<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> t, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> min<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>copyable T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> T min<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
requires indirectly_copyable_storable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, range_value_t<span class="sy1"><</span>R<span class="sy1">></span><span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> range_value_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
min<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> <span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> max<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> max<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> T max<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> t<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> T max<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> t, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> max<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>copyable T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> T max<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
requires indirectly_copyable_storable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, range_value_t<span class="sy1"><</span>R<span class="sy1">></span><span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> range_value_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
max<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> <span class="kw4">constexpr</span> pair<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span>, <span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> minmax<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span>, <span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> minmax<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>T, T<span class="sy1">></span> minmax<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> t<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>T, T<span class="sy1">></span> minmax<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> t, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">using</span> minmax_result <span class="sy1">=</span> min_max_result<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> minmax_result<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span>
|
|
minmax<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</span> b, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>copyable T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> minmax_result<span class="sy1"><</span>T<span class="sy1">></span>
|
|
minmax<span class="br0">(</span>initializer_list<span class="sy1"><</span>T<span class="sy1">></span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
requires indirectly_copyable_storable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, range_value_t<span class="sy1"><</span>R<span class="sy1">></span><span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> minmax_result<span class="sy1"><</span>range_value_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
minmax<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter min_element<span class="br0">(</span>ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter min_element<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter min_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter min_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I min_element<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
min_element<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter max_element<span class="br0">(</span>ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> ForwardIter max_element<span class="br0">(</span>ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
ForwardIter max_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
ForwardIter max_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I max_element<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">></span>
|
|
max_element<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>ForwardIter, ForwardIter<span class="sy1">></span>
|
|
minmax_element<span class="br0">(</span>ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> pair<span class="sy1"><</span>ForwardIter, ForwardIter<span class="sy1">></span>
|
|
minmax_element<span class="br0">(</span>ForwardIter first, ForwardIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter<span class="sy1">></span>
|
|
pair<span class="sy1"><</span>ForwardIter, ForwardIter<span class="sy1">></span>
|
|
minmax_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
pair<span class="sy1"><</span>ForwardIter, ForwardIter<span class="sy1">></span>
|
|
minmax_element<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter first, ForwardIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">using</span> minmax_element_result <span class="sy1">=</span> min_max_result<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> minmax_element_result<span class="sy1"><</span>I<span class="sy1">></span>
|
|
minmax_element<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>forward_range R, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> minmax_element_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
minmax_element<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 有界值</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> clamp<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> v, <span class="kw4">const</span> T<span class="sy3">&</span> lo, <span class="kw4">const</span> T<span class="sy3">&</span> hi<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span> clamp<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> v, <span class="kw4">const</span> T<span class="sy3">&</span> lo, <span class="kw4">const</span> T<span class="sy3">&</span> hi, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> Proj <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy2">*</span>, Proj<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">const</span> T<span class="sy3">&</span>
|
|
clamp<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> v, <span class="kw4">const</span> T<span class="sy3">&</span> lo, <span class="kw4">const</span> T<span class="sy3">&</span> hi, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 字典序比较</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span>
|
|
lexicographical_compare<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span>
|
|
lexicographical_compare<span class="br0">(</span>InputIter1 first1, InputIter1 last1,
|
|
InputIter2 first2, InputIter2 last2,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2<span class="sy1">></span>
|
|
<span class="kw4">bool</span>
|
|
lexicographical_compare<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> ExecutionPolicy, <span class="kw1">class</span> ForwardIter1, <span class="kw1">class</span> ForwardIter2,
|
|
<span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">bool</span>
|
|
lexicographical_compare<span class="br0">(</span>ExecutionPolicy<span class="sy3">&&</span> exec,
|
|
ForwardIter1 first1, ForwardIter1 last1,
|
|
ForwardIter2 first2, ForwardIter2 last2,
|
|
Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I1, sentinel_for<span class="sy1"><</span>I1<span class="sy1">></span> S1, input_iterator I2, sentinel_for<span class="sy1"><</span>I2<span class="sy1">></span> S2,
|
|
<span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity, <span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>I1, Proj1<span class="sy1">></span>, projected<span class="sy1"><</span>I2, Proj2<span class="sy1">>></span> Comp <span class="sy1">=</span>
|
|
ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span>
|
|
lexicographical_compare<span class="br0">(</span>I1 first1, S1 last1, I2 first2, S2 last2,
|
|
Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_range R1, input_range R2, <span class="kw1">class</span> Proj1 <span class="sy1">=</span> identity,
|
|
<span class="kw1">class</span> Proj2 <span class="sy1">=</span> identity,
|
|
indirect_strict_weak_order<span class="sy1"><</span>projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R1<span class="sy1">></span>, Proj1<span class="sy1">></span>,
|
|
projected<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R2<span class="sy1">></span>, Proj2<span class="sy1">>></span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span>
|
|
lexicographical_compare<span class="br0">(</span>R1<span class="sy3">&&</span> r1, R2<span class="sy3">&&</span> r2, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>,
|
|
Proj1 proj1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj2 proj2 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 三路比较算法</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2, <span class="kw1">class</span> Cmp<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">auto</span>
|
|
lexicographical_compare_three_way<span class="br0">(</span>InputIter1 b1, InputIter1 e1,
|
|
InputIter2 b2, InputIter2 e2,
|
|
Cmp comp<span class="br0">)</span>
|
|
<span class="sy2">-</span><span class="sy1">></span> decltype<span class="br0">(</span>comp<span class="br0">(</span><span class="sy2">*</span>b1, <span class="sy2">*</span>b2<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter1, <span class="kw1">class</span> InputIter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">auto</span>
|
|
lexicographical_compare_three_way<span class="br0">(</span>InputIter1 b1, InputIter1 e1,
|
|
InputIter2 b2, InputIter2 e2<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 排列</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> next_permutation<span class="br0">(</span>BidirectionalIter first,
|
|
BidirectionalIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> next_permutation<span class="br0">(</span>BidirectionalIter first,
|
|
BidirectionalIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">using</span> next_permutation_result <span class="sy1">=</span> in_found_result<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> next_permutation_result<span class="sy1"><</span>I<span class="sy1">></span>
|
|
next_permutation<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> next_permutation_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
next_permutation<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> prev_permutation<span class="br0">(</span>BidirectionalIter first,
|
|
BidirectionalIter last<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> BidirectionalIter, <span class="kw1">class</span> Compare<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> prev_permutation<span class="br0">(</span>BidirectionalIter first,
|
|
BidirectionalIter last, Compare comp<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">using</span> prev_permutation_result <span class="sy1">=</span> in_found_result<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>I, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> prev_permutation_result<span class="sy1"><</span>I<span class="sy1">></span>
|
|
prev_permutation<span class="br0">(</span>I first, S last, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_range R, <span class="kw1">class</span> Comp <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
|
|
<span class="kw1">class</span> Proj <span class="sy1">=</span> identity<span class="sy1">></span>
|
|
requires sortable<span class="sy1"><</span>iterator_t<span class="sy1"><</span>R<span class="sy1">></span>, Comp, Proj<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> prev_permutation_result<span class="sy1"><</span>borrowed_iterator_t<span class="sy1"><</span>R<span class="sy1">>></span>
|
|
prev_permutation<span class="br0">(</span>R<span class="sy3">&&</span> r, Comp comp <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span>, Proj proj <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ranges::in_fun_result">类模板 <span class="t-lc">std::ranges::in_fun_result</span></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">ranges</span> <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> F<span class="sy1">></span>
|
|
<span class="kw1">struct</span> in_fun_result <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I in<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> F fun<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2, <span class="kw1">class</span> F2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I<span class="sy3">&</span>, I2<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span><span class="kw4">const</span> F<span class="sy3">&</span>, F2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_fun_result<span class="sy1"><</span>I2, F2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>in, fun<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2, <span class="kw1">class</span> F2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span>I, I2<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span>F, F2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_fun_result<span class="sy1"><</span>I2, F2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>fun<span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ranges::in_in_result">类模板 <span class="t-lc">std::ranges::in_in_result</span></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">ranges</span> <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">></span>
|
|
<span class="kw1">struct</span> in_in_result <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I1 in1<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I2 in2<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> II1, <span class="kw1">class</span> II2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I1<span class="sy3">&</span>, II1<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span><span class="kw4">const</span> I2<span class="sy3">&</span>, II2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_in_result<span class="sy1"><</span>II1, II2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>in1, in2<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> II1, <span class="kw1">class</span> II2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span>I1, II1<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span>I2, II2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_in_result<span class="sy1"><</span>II1, II2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in1<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in2<span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ranges::in_out_result">类模板 <span class="t-lc">std::ranges::in_out_result</span></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">ranges</span> <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">struct</span> in_out_result <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I in<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> O out<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2, <span class="kw1">class</span> O2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I<span class="sy3">&</span>, I2<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span><span class="kw4">const</span> O<span class="sy3">&</span>, O2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_out_result<span class="sy1"><</span>I2, O2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>in, out<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2, <span class="kw1">class</span> O2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span>I, I2<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span>O, O2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_out_result<span class="sy1"><</span>I2, O2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>out<span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ranges::in_in_out_result">类模板 <span class="t-lc">std::ranges::in_in_out_result</span></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">ranges</span> <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> O<span class="sy1">></span>
|
|
<span class="kw1">struct</span> in_in_out_result <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I1 in1<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I2 in2<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> O out<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> II1, <span class="kw1">class</span> II2, <span class="kw1">class</span> OO<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I1<span class="sy3">&</span>, II1<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span><span class="kw4">const</span> I2<span class="sy3">&</span>, II2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span><span class="kw4">const</span> O<span class="sy3">&</span>, OO<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_in_out_result<span class="sy1"><</span>II1, II2, OO<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>in1, in2, out<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> II1, <span class="kw1">class</span> II2, <span class="kw1">class</span> OO<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span>I1, II1<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span>I2, II2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span>O, OO<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_in_out_result<span class="sy1"><</span>II1, II2, OO<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in1<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in2<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>out<span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ranges::in_out_out_result">类模板 <span class="t-lc">std::ranges::in_out_out_result</span></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">ranges</span> <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> O1, <span class="kw1">class</span> O2<span class="sy1">></span>
|
|
<span class="kw1">struct</span> in_out_out_result <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I in<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> O1 out1<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> O2 out2<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> II, <span class="kw1">class</span> OO1, <span class="kw1">class</span> OO2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I<span class="sy3">&</span>, II<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span><span class="kw4">const</span> O1<span class="sy3">&</span>, OO1<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span><span class="kw4">const</span> O2<span class="sy3">&</span>, OO2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_out_out_result<span class="sy1"><</span>II, OO1, OO2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>in, out1, out2<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> II, <span class="kw1">class</span> OO1, <span class="kw1">class</span> OO2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span>I, II<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span>O1, OO1<span class="sy1">></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span>O2, OO2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_out_out_result<span class="sy1"><</span>II, OO1, OO2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>out1<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>out2<span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ranges::min_max_result">类模板 <span class="t-lc">std::ranges::min_max_result</span></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">ranges</span> <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">struct</span> min_max_result <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> T min<span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> T max<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span>, T2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator min_max_result<span class="sy1"><</span>T2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>min, max<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span>T, T2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator min_max_result<span class="sy1"><</span>T2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>min<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>max<span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ranges::in_found_result">类模板 <span class="t-lc">std::ranges::in_found_result</span></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">ranges</span> <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> in_found_result <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>no_unique_address<span class="br0">]</span><span class="br0">]</span> I in<span class="sy4">;</span>
|
|
<span class="kw4">bool</span> found<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I<span class="sy3">&</span>, I2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_found_result<span class="sy1"><</span>I2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>in, found<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span>I, I2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> operator in_found_result<span class="sy1"><</span>I2<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>in<span class="br0">)</span>, found<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|