2

私はこれを理解しようと一日中頭を悩ませてきました。私が見る限り、オーバーロードされた + 演算子と - 演算子でコードが既に書かれているので、 [] 演算子をオーバーロードする方法を理解する必要があります。それらの中に値が配置され、リストを正しくトラバースし、情報を指します..[5] 私が言ったように、私が言ったように、私はほとんどコードを+と-に書いておく必要があるようです...

typename doublyLinkedList<T>::iterator doublyLinkedList<T>::iterator::operator+(const int amount) const {
    doublyLinkedList<T>::iterator tempClone(*this);
    tempClone.pastBoundary=false;
    T i;

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

    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;

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

    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;   
    }
}


template <typename T>
T& doublyLinkedList<T>::iterator::operator[](const int index) {
doublyLinkedList<T>::iterator tempClone(*this);

if(index >= 0){
   return this->operator+(index);
 }else{
   return this->operator-(index);
 }
4

1 に答える 1

5

あなたoperator+はイテレータを返すのでoperator[]、戻り値を間接的にする必要があります:

template <typename T>
T& doublyLinkedList<T>::iterator::operator[](const int index) {
  return *(this + index);
}

他の場所で述べたように、O(n) のパフォーマンスが驚くべきものになる可能性があるため、非ランダム アクセス コンテナーを提供operator+または提供することは誤解を招く可能性があります。operator[]

于 2013-02-12T17:03:38.620 に答える