NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
algorithm/set.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ALGORITHM_SET_HPP__
2#define NEFORCE_CORE_ALGORITHM_SET_HPP__
3
11
13NEFORCE_BEGIN_NAMESPACE__
14
20
26
46template <typename Iterator1, typename Iterator2, typename Iterator3>
47constexpr Iterator3 set_union(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result) {
49 "Iterator must be forward_iterator");
50
51 while (first1 != last1 && first2 != last2) {
52 if (*first1 < *first2) {
53 *result = *first1;
54 ++first1;
55 } else if (*first2 < *first1) {
56 *result = *first2;
57 ++first2;
58 } else {
59 *result = *first1;
60 ++first1;
61 ++first2;
62 }
63 ++result;
64 }
65 return _NEFORCE copy(first2, last2, _NEFORCE copy(first1, last1, result));
66}
67
83template <typename Iterator1, typename Iterator2, typename Iterator3>
84constexpr Iterator3 set_intersection(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2,
85 Iterator3 result) {
87 "Iterator must be forward_iterator");
88
89 while (first1 != last1 && first2 != last2) {
90 if (*first1 < *first2) {
91 ++first1;
92 } else if (*first2 < first1) {
93 ++first2;
94 } else {
95 *result = *first1;
96 ++first1;
97 ++first2;
98 ++result;
99 }
100 }
101 return result;
102}
103
119template <typename Iterator1, typename Iterator2, typename Iterator3>
120constexpr Iterator3 set_difference(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2,
121 Iterator3 result) {
123 "Iterator must be forward_iterator");
124
125 while (first1 != last1 && first2 != last2) {
126 if (*first1 < *first2) {
127 *result = *first1;
128 ++first1;
129 ++result;
130 } else if (*first2 < first1) {
131 ++first2;
132 } else {
133 ++first1;
134 ++first2;
135 }
136 }
137 return _NEFORCE copy(first1, last1, result);
138}
139
156template <typename Iterator1, typename Iterator2, typename Iterator3>
157constexpr Iterator3 set_symmetric_difference(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2,
158 Iterator3 result) {
160 "Iterator must be forward_iterator");
161
162 while (first1 != last1 && first2 != last2) {
163 if (*first1 < *first2) {
164 *result = *first1;
165 ++first1;
166 ++result;
167 } else if (*first2 < first1) {
168 *result = *first2;
169 ++first1;
170 ++result;
171 } else {
172 ++first1;
173 ++first2;
174 }
175 }
176 return _NEFORCE copy(first2, last2, _NEFORCE copy(first1, last1, result));
177}
178 // SetAlgorithms
180 // StandardAlgorithms
182
183NEFORCE_END_NAMESPACE__
184#endif // NEFORCE_CORE_ALGORITHM_SET_HPP__
NEFORCE_INLINE17 constexpr bool is_ranges_fwd_iter_v
检查是否为范围前向迭代器
constexpr Iterator3 set_union(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result)
计算两个已排序范围的并集
constexpr Iterator3 set_symmetric_difference(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_intersection(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Iterator3 result)
计算两个已排序范围的交集
constexpr Iterator2 copy(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__copy_aux(first, last, result)))
复制范围元素
移位和修改算法