MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
algorithm/set.hpp
浏览该文件的文档.
1#ifndef MSTL_CORE_ALGORITHM_SET_HPP__
2#define MSTL_CORE_ALGORITHM_SET_HPP__
3
11
14
20
40template <typename Iterator1, typename Iterator2, typename Iterator3,
42constexpr Iterator3 set_union(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result) {
43 while (first1 != last1 && first2 != last2) {
44 if (*first1 < *first2) {
45 *result = *first1;
46 ++first1;
47 } else if (*first2 < *first1) {
48 *result = *first2;
49 ++first2;
50 } else {
51 *result = *first1;
52 ++first1; ++first2;
53 }
54 ++result;
55 }
56 return _MSTL copy(first2, last2, _MSTL copy(first1, last1, result));
57}
58
74template <typename Iterator1, typename Iterator2, typename Iterator3,
76constexpr Iterator3 set_intersection(Iterator1 first1, Iterator1 last1,
77 Iterator2 first2, Iterator2 last2, Iterator3 result) {
78 while (first1 != last1 && first2 != last2) {
79 if (*first1 < *first2) {
80 ++first1;
81 } else if (*first2 < first1) {
82 ++first2;
83 } else {
84 *result = *first1;
85 ++first1; ++first2;
86 ++result;
87 }
88 }
89 return result;
90}
91
107template <typename Iterator1, typename Iterator2, typename Iterator3,
109constexpr Iterator3 set_difference(Iterator1 first1, Iterator1 last1,
110 Iterator2 first2, Iterator2 last2, Iterator3 result) {
111 while (first1 != last1 && first2 != last2) {
112 if (*first1 < *first2) {
113 *result = *first1;
114 ++first1;
115 ++result;
116 } else if (*first2 < first1) {
117 ++first2;
118 } else {
119 ++first1; ++first2;
120 }
121 }
122 return _MSTL copy(first1, last1, result);
123}
124
141template <typename Iterator1, typename Iterator2, typename Iterator3,
143constexpr Iterator3 set_symmetric_difference(Iterator1 first1, Iterator1 last1,
144 Iterator2 first2, Iterator2 last2, Iterator3 result) {
145 while (first1 != last1 && first2 != last2) {
146 if (*first1 < *first2) {
147 *result = *first1;
148 ++first1;
149 ++result;
150 } else if (*first2 < first1) {
151 *result = *first2;
152 ++first1;
153 ++result;
154 } else {
155 ++first1; ++first2;
156 }
157 }
158 return _MSTL copy(first2, last2, _MSTL copy(first1, last1, result));
159}
160 // SetAlgorithms
162
164#endif // MSTL_CORE_ALGORITHM_SET_HPP__
MSTL_INLINE17 constexpr bool is_ranges_fwd_iter_v
检查是否为范围前向迭代器
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator3 set_symmetric_difference(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result)
计算两个已排序范围的对称差集
constexpr Iterator3 set_intersection(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result)
计算两个已排序范围的交集
constexpr Iterator3 set_difference(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result)
计算两个已排序范围的差集
constexpr Iterator3 set_union(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result)
计算两个已排序范围的并集
constexpr Iterator2 copy(Iterator1 first, Iterator1 last, Iterator2 result)
复制范围元素
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名
MSTL移位和修改算法