Home | History | Annotate | Download | only in ustl-1.0

Lines Matching refs:last

27 /// Swaps corresponding elements of [first, last) and [result,)
31 inline ForwardIterator2 swap_ranges (ForwardIterator1 first, ForwardIterator2 last, ForwardIterator2 result)
33 for (; first != last; ++first, ++result)
38 /// Returns the first iterator i in the range [first, last) such that
39 /// *i == value. Returns last if no such iterator exists.
43 inline InputIterator find (InputIterator first, InputIterator last, const EqualityComparable& value)
45 while (first != last && !(*first == value))
54 ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last)
56 if (first != last)
57 for (ForwardIterator prev = first; ++first != last; ++ prev)
60 return (last);
85 /// Count finds the number of elements in [first, last) that are equal
87 /// number of iterators i in [first, last) such that *i == value.
91 inline size_t count (InputIterator first, InputIterator last, const EqualityComparable& value)
94 for (; first != last; ++first)
102 /// iterator i in the range [first, last), and assigns the result of that
104 /// for each n such that 0 <= n < last - first, it performs the assignment
106 /// The return value is result + (last - first).
111 inline OutputIterator transform (InputIterator first, InputIterator last, OutputIterator result, UnaryFunction op)
113 for (; first != last; ++result, ++first)
138 /// Replace replaces every element in the range [first, last) equal to
144 inline void replace (ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value)
146 for (; first != last; ++first)
151 /// Replace_copy copies elements from the range [first, last) to the range
152 /// [result, result + (last-first)), except that any element equal to old_value
154 /// integer n such that 0 <= n < last-first, replace_copy performs the
160 inline OutputIterator replace_copy (InputIterator first, InputIterator last, OutputIterator result, const T& old_value, const T& new_value)
162 for (; first != last; ++result, ++first)
167 /// takes no arguments, to each element in the range [first, last).
172 inline void generate (ForwardIterator first, ForwardIterator last, Generator gen)
174 for (; first != last; ++first)
193 /// That is: for every i such that 0 <= i <= (last - first) / 2),
194 /// it exchanges *(first + i) and *(last - (i + 1)).
198 inline void reverse (BidirectionalIterator first, BidirectionalIterator last)
200 for (; distance (first, --last) > 0; ++first)
201 iter_swap (first, last);
204 /// \brief Reverses [first,last) and writes it to \p output.
208 inline OutputIterator reverse_copy (BidirectionalIterator first, BidirectionalIterator last, OutputIterator result)
210 for (; first != last; ++result)
211 *result = *--last;
215 /// \brief Exchanges ranges [first, middle) and [middle, last)
219 ForwardIterator rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last)
221 if (first == middle || middle == last)
224 reverse (middle, last);
225 for (;first != middle && middle != last; ++first)
226 iter_swap (first, --last);
227 reverse (first, (first == middle ? last : middle));
233 inline T* rotate (T* first, T* middle, T* last)
235 rotate_fast (first, middle, last);
240 /// \brief Exchanges ranges [first, middle) and [middle, last) into \p result.
244 inline OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result)
246 return (copy (first, middle, copy (middle, last, result)));
272 void inplace_merge (InputIterator first, InputIterator middle, InputIterator last)
274 for (; middle != last; ++first) {
283 /// [first, last) to a range beginning at result. The return value is the
286 /// range [first, last).
290 OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, const T& value)
292 for (; first != last; ++first) {
302 /// from the range [first, last) to a range beginning at result. The return
305 /// range [first, last). Range [rfirst, rlast) is assumed to be sorted.
310 OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, RInputIterator rfirst, RInputIterator rlast)
312 for (; first != last; ++first) {
323 /// Remove removes from the range [first, last) all elements that are equal to
326 /// in the range [new_last, last) are all still dereferenceable, but the
333 inline ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& value)
335 return (remove_copy (first, last, first, value));
338 /// Unique_copy copies elements from the range [first, last) to a range
346 OutputIterator unique_copy (InputIterator first, InputIterator last, OutputIterator result)
348 if (first != last) {
350 while (++first != last)
359 /// [first, last), the algorithm unique removes all but the first element.
362 /// The iterators in the range [new_last, last) are all still dereferenceable,
369 inline ForwardIterator unique (ForwardIterator first, ForwardIterator last)
371 return (unique_copy (first, last, first));
374 /// Returns the furthermost iterator i in [first, last) such that,
380 ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
383 while (first != last) {
384 mid = advance (first, distance (first,last) / 2);
388 last = mid;
397 inline ForwardIterator binary_search (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
399 ForwardIterator found = lower_bound (first, last, value);
400 return ((found == last || value < *found) ? last : found);
403 /// Returns the furthermost iterator i in [first,last) such that for
408 ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
411 while (first != last) {
412 mid = advance (first, distance (first,last) / 2);
414 last = mid;
418 return (last);
425 inline pair<ForwardIterator,ForwardIterator> equal_range (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
428 rv.second = rv.first = lower_bound (first, last, value);
429 while (rv.second != last && !(value < *(rv.second)))
438 void random_shuffle (RandomAccessIterator first, RandomAccessIterator last)
440 for (; first != last; ++ first)
441 iter_swap (first, first + (rand() % distance (first, last)));
460 void sort (RandomAccessIterator first, RandomAccessIterator last, Compare)
464 qsort (first, distance (first, last), sizeof(value_type),
472 inline void sort (RandomAccessIterator first, RandomAccessIterator last)
475 sort (first, last, less<value_type>());
483 void stable_sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
485 for (RandomAccessIterator j, i = first; ++i < last;) { // Insertion sort
495 inline void stable_sort (RandomAccessIterator first, RandomAccessIterator last)
498 stable_sort (first, last, less<value_type>());
510 /// \brief Searches for the last subsequence [first2,last2) in [first1,last1)
519 /// \brief Searches for the first occurence of \p count \p values in [first, last)
522 inline Iterator search_n (Iterator first, Iterator last, size_t count, const T& value)
525 return (search_n (first, last, count, value, equal_to<value_type>()));
590 inline bool is_sorted (ForwardIterator first, ForwardIterator last)
593 return (is_sorted (first, last, less<value_type>()));
605 /// \brief Creates the next lexicographical permutation of [first,last).
609 inline bool next_permutation (BidirectionalIterator first, BidirectionalIterator last)
612 return (next_permutation (first, last, less<value_type>()));
615 /// \brief Creates the previous lexicographical permutation of [first,last).
619 inline bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last)
622 return (prev_permutation (first, last, less<value_type>()));
625 /// \brief Returns iterator to the max element in [first,last)
628 inline ForwardIterator max_element (ForwardIterator first, ForwardIterator last)
631 return (max_element (first, last, less<value_type>()));
634 /// \brief Returns iterator to the min element in [first,last)
637 inline ForwardIterator min_element (ForwardIterator first, ForwardIterator last)
640 return (min_element (first, last, less<value_type>()));
644 /// Contents of [middle,last) is undefined. This implementation just calls stable_sort.
647 inline void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last)
650 partial_sort (first, middle, last, less<value_type>());
660 inline void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last)
662 partial_sort (first, nth, last);
668 inline RandomAccessIterator partial_sort_copy (InputIterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last)
671 return (partial_sort_copy (first, last, result_first, result_last, less<value_type>()));