0

ハッシュテーブルに 2 次元ベクトルがあります

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

およびイテレータのクラス。

class myiterator{
    public:
        myiterator();
        myiterator(std::vector<std::vector<std::string> >& v, int ii, int jj) : 
            vec(v), i(ii), j(jj) {}
        myiterator& operator++(); // prefix operator
        myiterator& operator--(); // prefix 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));
    }

イテレータの begin と end を実装しましたが、前置演算子をどのように、そして何をするかわかりません。また、「->」という演算子をグーグルで検索できませんでしたか?では、2 次元ベクトルのプレフィックス イテレータの実装に関するちょっとしたトリックまたは記事を教えてください。前もって感謝します。

4

2 に答える 2

3

operator->逆参照演算子です。これにより、書き込みが可能になりますit->myFunc()(つまり、反復子がポインターのように動作できるようになります)。通常、イテレータが指している型を返します。

前置演算子 (operator++およびoperator--) は、反復子をそれぞれ次の要素と前の要素に移動する必要があります。

補足として、 をオーバーロードしている場合はoperator->、 もオーバーロードする必要がoperator*()あります。おそらく、後置演算子myiterator operator--(int)、およびもオーバーロードする必要がありますmyiterator operator++(int)

于 2013-11-10T19:26:08.773 に答える