🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page

Was this helpful?

  1. Паттерны
  2. Поведенческие паттерны
  3. Итератор

Реализации на С++

Iterator

Общая реализация на языке С++

#include <iostream>
#include <string>
#include <vector>
template <typename T, typename U>
class Iterator 
{
public:
    typedef typename std::vector<T>::iterator iter_type;
    Iterator(U *p_data, bool reverse = false) : m_p_data_(p_data) 
    {
        m_it_ = m_p_data_->m_data_.begin();
    }
    void First() 
    {
        m_it_ = m_p_data_->m_data_.begin();
    }
    void Next() 
    {
        m_it_++;
    }
    bool IsDone() 
    {
        return (m_it_ == m_p_data_->m_data_.end());
    }
    iter_type Current() 
    {
        return m_it_;
    }
private:
    U *m_p_data_;
    iter_type m_it_;
};
template <class T>
class Container 
{
    friend class Iterator<T, Container>;
public:
    void Add(T a) 
    {
        m_data_.push_back(a);
    }
    Iterator<T, Container> *CreateIterator() 
    {
        return new Iterator<T, Container>(this);
    }
private:
    std::vector<T> m_data_;
};
class Data 
{
public:
    Data(int a = 0) : m_data_(a) {}
    void set_data(int a) 
    {
        m_data_ = a;
    }
    int data() 
    {
        return m_data_;
    }
private:
    int m_data_;
};
void ClientCode() 
{
    std::cout << "Iterator with int" << std::endl;
    Container<int> cont;
    for (int i = 0; i < 10; i++) 
        cont.Add(i);
    Iterator<int, Container<int>> *it = cont.CreateIterator();
    for (it->First(); !it->IsDone(); it->Next()) 
        std::cout << *it->Current() << " ";
    std::cout << std::endl;
    Container<Data> cont2;
    Data a(100), b(1000), c(10000);
    cont2.Add(a);
    cont2.Add(b);
    cont2.Add(c);
    std::cout << std::endl << "Iterator with custom Class" << std::endl;
    Iterator<Data, Container<Data>> *it2 = cont2.CreateIterator();
    for (it2->First(); !it2->IsDone(); it2->Next()) 
        std::cout << it2->Current()->data() << " ";
    std::cout << std::endl;
    delete it;
    delete it2;
}
int main() 
{
    ClientCode();
    return 0;
}
PreviousИтераторNextРеализации на Kotlin

Last updated 1 year ago

Was this helpful?