0

私は2次元ベクトルで実現するハッシュテーブルを持っています

std::vector<std::vector<std::string> > htable;

また、ハッシュ テーブルのサブクラスである myiterator クラスに ++、-、および * 演算子を記述しました。

class myiterator{
    public:
        myiterator();
        myiterator(std::vector<std::vector<std::string> >& v, int ii, int jj) : 
            vec(v), i(ii), j(jj) {}
        std::string operator*(){
            return vec[i][j];
        }
        myiterator& operator++(){
            if(j==vec[i].size()-1){
                int start=0;
                while(vec[start].size()==0){
                    start++;
                }
                i=start;
                j=0;
            }
            else{
                j++;
            }
            return *this;
        }
        // myiterator operator++(int); // postfix operator
        myiterator& operator--(){
            if(j==0){
                int end=vec[i].size()-1;
                while(vec[end].size()==0){
                    end--;
                }
                i=end;
                j=vec[end].size()-1;
            }
            else{
                j--;
            }
            return *this;
        } // prefix operator
        // myiterator operator--(int); // postfix operator
        std::string* operator->();
    private:
        std::vector<std::vector<std::string> >& vec; // the vector we are iterating over
        int i; // the position in the vector (first dimension)
        int j; // the position in the vector (second dimension)
    };
    myiterator begin() {
        int start=0;
        while(htable[start].size()==0){
            start++;
        }
        return (myiterator(htable, start, 0));
    }
    myiterator end(){
        int end=htable.size()-1;
        while(htable[end].size()==0){
            end--;
        }
        return (myiterator(htable, end, htable[end].size()-1));
    }

問題は、-> 演算子をどのように実装する必要があるかということです。そして、彼は何をしますか?ググったけどわからなかった。私の質問が初心者で基本的なものである場合は申し訳ありません。前もって感謝します。

4

3 に答える 3

0

通常、アプリケーションは、内部オブジェクトへのポインターを返すスマート ポインター オブジェクトに対して演算子 -> を使用します。使い方を見る

于 2013-11-10T20:57:24.230 に答える