1

我已经重载了这些运算符来帮助我遍历一个双向链表,但是遇到了一个小错误,而且对于 c++ 来说还是新手,我被卡住了。我从来没有考虑过输入的“金额”是负数。所以我认为我需要在每个运算符中检查一个负数,因为它会极大地改变我遍历列表的方式,例如,如果我指向节点 5 并且我 +(-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;   
    }
}
4

2 回答 2

1

if(amount = (-amount))- 除非金额为 0,否则始终为真。

它需要在 for 循环之前进行。事实上,我可能会这样做:

if (amount < 0) return this->operator-(-amount); 

另一个操作员反之亦然。

于 2013-02-11T17:53:48.557 回答
0

在 operator+ 的开头,添加:

if (amount <0) {
  operator-(-amount);
  return;
}

同样在运算符中添加:

if (amount <0) {
  operator+(-amount);
  return;
}

编辑:顺便说一句,要非常小心拼写错误,例如:

if(amount = (-amount))

它将 -amount 分配给数量,然后测试数量是否等于零!

于 2013-02-11T17:52:06.970 回答