Переопределение операции ++ c++

270
29 апреля 2022, 16:00

не получается сделать переопределение ++ как движение по списку. Помогите пожалуйста исправить проблему

  struct Elem
{
    int data; 
    Elem * next, *prev;
};
class List 
{
    Elem * Head, *Tail;
    int Count;
public:
List() 
{
    Head = Tail = NULL;
    Count = 0;
};
~List() { DelAll(); };
void Del(int pos)
{
    if (pos == 0)
    {
        cout << "Input position: ";
        cin >> pos;
    }
    if (pos < 1 || pos > Count)
    {
        cout << "Incorrect position !!!\n";
        return;
    }
    int i = 1;
    Elem * Del = Head;
    while (i < pos)
    {
        Del = Del->next;
        i++;
    }
    Elem * PrevDel = Del->prev;
    Elem * AfterDel = Del->next;

    if (PrevDel != 0 && Count != 1)
        PrevDel->next = AfterDel;
    if (AfterDel != 0 && Count != 1)
        AfterDel->prev = PrevDel;
    if (pos == 1)
        Head = AfterDel;
    if (pos == Count)
        Tail = PrevDel;
    delete Del;
    Count--;
}
void DelAll( )
{
    while (Count != 0)
        Del(1);
};
void AddTail(int n)
{ 
    Elem * temp = new Elem;
    temp->next = 0;
    temp->data = n;
    temp->prev = Tail;
    if (Tail != 0)
        Tail->next = temp;
    if (Count == 0)
        Head = Tail = temp;
    else
        Tail = temp;
    Count++;
};
Elem * temp = Head;
void Print() 
{
    cout << temp->data ;
    temp++;
    cout << temp->data;
};
List & operator ++ (int)
{
     temp = temp->next;
}
};
int main()
{
    List L;
    L.AddTail(1);
    L.AddTail(2);
    L.AddTail(3);
    L.AddTail(4);
    L.Print();
    L.DelAll();
    
    system("pause");
}
Answer 1
List operator ++ ()
List & operator ++ (List &temp, int)

и в конец

return temp;

А может так

List & operator ++ (int)
{
  temp = temp->next;
  return *this;
}

https://ideone.com/LMoNo8

#include <iostream>
using namespace std;
struct List
{
  List *next = 0;
};
List & operator ++ (List &x, int)
{
  x = *x.next;
  return x;
}
int main()
{
  List *lst = new List();
  lst->next = new List();
  
  cout << lst << ' ' << lst->next << endl;
  (*lst)++;
  cout << lst << ' ' << lst->next << endl;
  // Это упадёт
  //(*lst)++;
  //cout << lst << endl;
  List lst2;
  lst2.next = new List();
  cout << &lst2 << ' ' << lst2.next << endl;
  lst2++;
  cout << &lst2 << ' ' << lst2.next << endl;
  return 0;
}
0x555ab83aae70 0x555ab83aae90
0x555ab83aae70 0
0x7ffe1772b5e0 0x555ab83abec0
0x7ffe1772b5e0 0
READ ALSO
Скорость сравнения двух массивов char

Скорость сравнения двух массивов char

Вдруг возник такой простой вопрос: нужно просто сравнить два массива чаров

157
Проблема с оптимизацией цикла

Проблема с оптимизацией цикла

Программа работает верно для небольших отрезков, но когда задается отрезок к примеру от 1 до 10000000 начинается долгий процесс перебораНужно...

271
Ошибка при компиляции проекта с boost?

Ошибка при компиляции проекта с boost?

Не собирается программа код ниже:

288