Покритикуйте кривоподелуху на тему иттераторов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Код: Выделить всё

#include <iostream>

class TList
{
 public:
 class TItem;
 class TItterator
 {
  private:
   friend class TList;
   friend class TItem;
   TItem *Pointer;
   TItterator (TItem *Pointer)
   {
    this->Pointer=Pointer;
   }
  public:
   TItterator ()
   {
   }
   TItterator operator ++()
   {
    if (Pointer!=nullptr)
    {
     Pointer=Pointer->Next;
    }
   }
   TItem & operator * ()
   {
    return *Pointer;
   }
   operator bool ()
   {
    return (Pointer!=nullptr);
   }
 };
 class TItem
 {
  friend class TList;
  friend class TItterator;
  private:
   TItem *Next;
  public:
   int Data;
 };
 private:
  TItem *Start;
  TItem *Last;
 public:
  TList()
  {
   Start=nullptr;
   Last =nullptr;
  }
  void Add(int Data)
  {
   TItem *Item;
   Item=new TItem;
   Item->Data=Data;
   Item->Next=nullptr;
   if (Last!=nullptr)
   {
    Last->Next=Item;
   }
   Last=Item;
   if (Start==nullptr)
   {
    Start=Item;
   }
  }
  TItterator Begin()
  {
   return TItterator(Start);
  }
};

int main()
{
 TList List;
 TList::TItterator Itterator;
 List.Add(2);
 List.Add(21);
 List.Add(3);
 List.Add(4);
 List.Add(8);
 List.Add(5);
 List.Add(1);
 for (Itterator=List.Begin(); (bool)Itterator; ++Itterator)
 {
  std::cout<<(*Itterator).Data<<std::endl;
 }
 return 0;
}
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить