Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <utility>
- #include <vector>
- #include <set>
- #include <queue>
- using namespace std;
- // Пару итераторов представляем в виде шаблонного класса
- template<typename Iterator>
- class IteratorRange
- {
- private:
- Iterator first, last;
- public:
- IteratorRange(Iterator f, Iterator l): first(f), last(l){}
- Iterator begin() const
- {
- return first;
- }
- Iterator end() const
- {
- return last;
- }
- };
- //template<typename T>
- //IteratorRange<typename vector<T>::iterator> Head(vector<T>& v, size_t top)
- //{
- // // min берем для того случая когда хотим 3 элемента, а векторе их всего 2
- // return { v.begin(), next(v.begin(), min(top,v.size())) };
- //}
- //template<typename Container>
- //IteratorRange<typename Container::iterator> Head(Container& v, size_t top)
- //{
- // // min берем для того случая когда хотим 3 элемента, а векторе их всего 2
- // return { v.begin(), next(v.begin(), min(top,v.size())) };
- //}
- template<typename Container>
- auto Head(Container& v, size_t top)
- {
- // min берем для того случая когда хотим 3 элемента, а векторе их всего 2
- return IteratorRange{ v.begin(), next(v.begin(), min(top,v.size())) };
- }
- template <typename T>
- size_t RangeSize(IteratorRange<T> r)
- {
- return r.end() - r.begin();
- }
- // Порождающая функция
- template <typename Iterator>
- IteratorRange<Iterator> MakeRange(Iterator begin, Iterator end)
- {
- return IteratorRange<Iterator> {begin, end};
- }
- int main()
- {
- vector<int> v = { 1,2,3,4,5 };
- for (int& x : Head(v, 3))
- {
- ++x;
- }
- set<int> nums = { 5,7,12,8,10,5,6,1 };
- for (int x : Head(nums, 4))
- {
- cout << x << ' ';
- }
- cout << endl;
- const deque<int> nums2 = { 5,7,12,8,10,5,6,1 };
- for (int x : Head(nums2, 4))
- {
- cout << x << ' ';
- }
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement