@@ -206,7 +206,7 @@ template <typename T /*:number*/>
206206 inline bool between (T x, T low, T high)
207207 { return x >= low && x < high; }
208208
209- template <typename T/* :number*/ >
209+ template <typename T /* :number*/ >
210210 inline bool betweenEqual (T x, T low, T high)
211211 { return x >= low && x <= high; }
212212
@@ -2536,6 +2536,19 @@ template <typename T>
25362536 toDelete--;
25372537 }
25382538 }
2539+ Vector<T> subvec (size_t from,
2540+ size_t count = no_index) const
2541+ { Vector<T> res;
2542+ if (from >= P::size ())
2543+ return res;
2544+ size_t size = P::size () - from;
2545+ if (count != no_index)
2546+ minimize (size, count);
2547+ res. reserve (size);
2548+ for (size_t i = 0 ; i < size; i++)
2549+ res << (*this ) [from + i];
2550+ return res;
2551+ }
25392552
25402553 void sort ()
25412554 { if (ascending == etrue)
@@ -2686,8 +2699,7 @@ template <typename T>
26862699 }
26872700 template <typename U /* : T */ >
26882701 void setMinus (const Vector<U> &other)
2689- { filterIndex ([&] (size_t i) { return other. containsFast ((*this ) [i]); }); }
2690-
2702+ { filterIndex ([&] (size_t i) { return other. containsFast ((*this ) [i]); }); }
26912703 size_t findDuplicate (bool checkSortedP = true ) const
26922704 { if (P::size () <= 1 )
26932705 return no_index;
@@ -3079,6 +3091,10 @@ template <typename T /* : Root */>
30793091
30803092
30813093
3094+ enum SetOperation {soIntersect, soUnion, soMinus};
3095+
3096+
3097+
30823098template <typename T>
30833099 struct Set : set<T>
30843100 {
0 commit comments