1#ifndef NEFORCE_CORE_ALGORITHM_SET_HPP__
2#define NEFORCE_CORE_ALGORITHM_SET_HPP__
13NEFORCE_BEGIN_NAMESPACE__
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");
51 while (first1 != last1 && first2 != last2) {
52 if (*first1 < *first2) {
55 }
else if (*first2 < *first1) {
65 return _NEFORCE
copy(first2, last2, _NEFORCE
copy(first1, last1, result));
83template <
typename Iterator1,
typename Iterator2,
typename Iterator3>
84constexpr Iterator3
set_intersection(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2,
87 "Iterator must be forward_iterator");
89 while (first1 != last1 && first2 != last2) {
90 if (*first1 < *first2) {
92 }
else if (*first2 < first1) {
119template <
typename Iterator1,
typename Iterator2,
typename Iterator3>
120constexpr Iterator3
set_difference(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2,
123 "Iterator must be forward_iterator");
125 while (first1 != last1 && first2 != last2) {
126 if (*first1 < *first2) {
130 }
else if (*first2 < first1) {
137 return _NEFORCE
copy(first1, last1, result);
156template <
typename Iterator1,
typename Iterator2,
typename Iterator3>
160 "Iterator must be forward_iterator");
162 while (first1 != last1 && first2 != last2) {
163 if (*first1 < *first2) {
167 }
else if (*first2 < first1) {
176 return _NEFORCE
copy(first2, last2, _NEFORCE
copy(first1, last1, result));
183NEFORCE_END_NAMESPACE__
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)))
复制范围元素