これらの演算子をオーバーロードして、二重にリンクされたリストをトラバースできるようにしましたが、小さなバグに遭遇し、まだ 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;
}
}