Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- // Пару итераторов представляем в виде шаблонного класса
- template<typename Iterator>
- struct IteratorRange
- {
- Iterator first, last;
- 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())) };
- }
- // IteratorRange это не тип, это шаблон типа
- // чтобы из шаблона создать конкретный тип его нужно инстанцировать
- // IteratorRange<T> r - конкретный тип
- template <typename T>
- size_t RangeSize(IteratorRange<T> r)
- {
- return r.end() - r.begin();
- }
- int main()
- {
- vector<int> v = { 1,2,3,4,5 };
- for (int& x : Head(v, 3))
- {
- ++x;
- }
- for (int x : v)
- {
- cout << x << ' ';
- }
- //vector<double> d;
- cout << endl;
- cout << RangeSize(Head(v, 3));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement