Я перегрузил эти операторы, чтобы помочь мне пройти по двусвязному списку, но натолкнулся на небольшую ошибку, и, будучи еще новичком в c ++, я застрял. Я никогда не считал, что введенная «сумма» будет отрицательным числом. Поэтому я думаю, что мне нужно поставить проверку в каждом операторе для отрицательного числа, потому что это резко изменит способ обхода списка, например, если я указываю на узел 5 и I + (- 3), я бы хотел, чтобы он двигался в обратном направлении три узла, то же самое с -, 5 — (-3) будет идти вперед три узла. логика кажется простой, но синтаксис сбивает с толку. Вот перегруженные операторы:
template <typename T>
typename doublyLinkedList<T>::iterator doublyLinkedList<T>::iterator::operator+(const int amount) const {
doublyLinkedList<T>::iterator tempClone(*this);
tempClone.pastBoundary=false;
T i;
for(i=0; i < amount; i++)
{
if(tempClone.current->forward == NULL)
{
tempClone.pastBoundary =true;
}else
{
++tempClone;
}
}
if(tempClone.pastBoundary == true)
{
return *this;
}else
{
return tempClone;
}
}
template <typename T>
typename doublyLinkedList<T>::iterator doublyLinkedList<T>::iterator::operator-(const int amount) const {
doublyLinkedList<T>::iterator tempClone(*this);
tempClone.pastBoundary=false;
T i;
for(i=0; i < amount; i++)
{
if(tempClone.current->backward == NULL)
{
tempClone.pastBoundary =true;
}else
{
--tempClone;
}
}if(tempClone.pastBoundary == true)
{
return *this;
}else
{
return tempClone;
}
}
if(amount = (-amount))
— если сумма не равна 0, это всегда верно.
И это должно идти до цикла for. На самом деле, я бы, вероятно, сделал:
if (amount < 0) return this->operator-(-amount);
и наоборот для другого оператора.
В начале оператора + добавьте:
if (amount <0) {
operator-(-amount);
return;
}
и аналогично в оператор добавьте:
if (amount <0) {
operator+(-amount);
return;
}
Редактировать: кстати, будьте очень осторожны с опечатками вроде:
if(amount = (-amount))
который назначает -amount для количества, а затем проверяет, равно ли количество нулю!