1

これらの演算子をオーバーロードして、二重にリンクされたリストをトラバースできるようにしましたが、小さなバグに遭遇し、まだ c++ に慣れていないので立ち往生しています。入力された「金額」が負の数になることを考慮したことはありません。したがって、負の数の各演算子にチェックを入れる必要があると思います。リストをトラバースする方法が劇的に変わるためです。たとえば、ノード 5 を指していて +(-3)後方 3 ノード、- と同じ、5 - (-3) は 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))- amount が 0 でない限り、これは常に true です。

また、for ループの前に移動する必要があります。実際、私はおそらくそうするでしょう:

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

他のオペレーターの場合はその逆です。

于 2013-02-11T17:53:48.557 に答える
0

operator +の先頭に、次を追加します。

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

同様にoperator-add:

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

編集:ちなみに、次のようなタイプミスには十分注意してください。

if(amount = (-amount))

これは-amountをamountに割り当て、amountがゼロに等しいかどうかをテストします。

于 2013-02-11T17:52:06.970 に答える