std::includes
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |  | 该页由英文版wiki使用Google Translate机器翻译而来。 
 该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. | 
| 在头文件 <algorithm> 中定义
  | ||
| template< class InputIt1, class InputIt2 > bool includes( InputIt1 first1, InputIt1 last1, | (1) | |
| template< class InputIt1, class InputIt2 > bool includes( InputIt1 first1, InputIt1 last1, | (2) | |
返回true如果从排序的范围
[first2, last2)发现的每一个元素排序的范围内[first, last)。返回true如果[first2, last2)是空的. 原文:
Returns true if every element from the sorted range 
[first2, last2) is found within the sorted range [first, last). Also returns true if [first2, last2) is empty. 第一个版本预计都operator<范围进行排序,第二个版本需要进行排序的比较函数
comp.原文:
The first version expects both ranges to be sorted with operator<, the second version expects them to be sorted with the given comparison function 
comp.| 目录 | 
[编辑] 参数
| first1, last1 | - |  检查的元素排序的范围 原文:  the sorted range of elements to examine | 
| first2, last2 | - |  搜索排序范围内的元素 原文:  the sorted range of elements to search for | 
| comp | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following: bool cmp(const Type1 &a, const Type2 &b); The signature does not need to have const &, but the function must not modify the objects passed to it. | 
| 类型要求 | ||
| - InputIt必须满足InputIterator的要求。 | ||
[编辑] 返回值
true如果从
[first2, last2)的每一个元素是一个成员的[first, last).原文:
true if every element from 
[first2, last2) is a member of [first, last).[编辑] 复杂度
最2·(N1+N2-1)比较,其中N1= std::distance(first1, last1)和N2= std::distance(first2, last2).
原文:
At most 2·(N1+N2-1) comparisons, where N1 = std::distance(first1, last1) and N2 = std::distance(first2, last2).
[编辑] 可能的实现
| 版本一 | 
|---|
| template<class InputIt1, class InputIt2> bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2) { for (; first2 != last2; ++first1) { if (first1 == last1 || *first2 < *first1) return false; if ( !(*first1 < *first2) ) ++first2; } return true; } | 
| 版本二 | 
| template<class InputIt1, class InputIt2> bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Compare comp) { for (; first2 != last2; ++first1) { if (first1 == last1 || comp(*first2, *first1)) return false; if (!comp(*first1, *first2)) ++first2; } return true; } | 
[编辑] 示例
#include <iostream> #include <algorithm> #include <cctype> int main() { std::vector<char> v1 {'a', 'b', 'c', 'f', 'h', 'x'}; std::vector<char> v2 {'a', 'b', 'c'}; std::vector<char> v3 {'a', 'c'}; std::vector<char> v4 {'g'}; std::vector<char> v5 {'a', 'c', 'g'}; std::vector<char> v6; for (auto i : v1) std::cout << i << ' '; std::cout << "includes:\n"; for (auto i : v2) std::cout << i << ' '; std::cout << ": " << std::includes(v1.begin(), v1.end(), v2.begin(), v2.end()) << '\n'; for (auto i : v3) std::cout << i << ' '; std::cout << ": " << std::includes(v1.begin(), v1.end(), v3.begin(), v3.end()) << '\n'; for (auto i : v4) std::cout << i << ' '; std::cout << ": " << std::includes(v1.begin(), v1.end(), v4.begin(), v4.end()) << '\n'; for (auto i : v5) std::cout << i << ' '; std::cout << ": " << std::includes(v1.begin(), v1.end(), v5.begin(), v5.end()) << '\n'; for (auto i : v6) std::cout << i << ' '; std::cout << ": " << std::includes(v1.begin(), v1.end(), v6.begin(), v6.end()) << '\n'; auto cmp_nocase = [](char a, char b) { return std::tolower(a) < std::tolower(b); } std::vector<char> v7 {'A', 'B', 'C'}; for (auto i : v7) std::cout << i << ' '; std::cout << ": " << std::includes(v1.begin(), v1.end(), v7.begin(), v7.end(), cmp_nocase) << '\n'; }
输出:
a b c f h x includes: a b c : 1 a c : 1 g : 0 a c g : 0 A B C : 1
[编辑] 另请参阅
| 计算两个集合的差集 (函数模板) | |
| 查找一个元素区间 (函数模板) | 


