c++ - 前缀运算符的实现

标签 c++ iterator

我的哈希表有二维 vector

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

我已经为迭代器实现了开始和结束,但我不知道如何以及如何处理前缀运算符。另外,我无法用谷歌搜索运算符“->”是什么? 那么,你能给我一些关于二维 vector 的实现前缀迭代器的小技巧或文章吗?提前致谢。

最佳答案

operator-> 是一个解引用运算符。它允许您编写 it->myFunc()(即允许迭代器像指针一样运行)。通常,您将返回迭代器指向的类型。

您的前缀运算符(operator++operator--)应该分别将迭代器移动到下一个和上一个元素。

作为旁注,如果您正在重载 operator->,您也应该重载 operator*(),并且您可能还想重载后置 -修复运算符 myiterator operator--(int)myiterator operator++(int)

关于c++ - 前缀运算符的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19893961/

相关文章:

c++ - 为什么从分配给变量的 istream_iterator 读取不起作用?

java - Groovy/POI 在不同系统上返回不同迭代器

map - 使用 s :iterator 迭代 map 列表

rust - 为什么每种情况下读取的字节数不同?

python - 迭代和连接 2 个列表占用大量内存

c++ - 套接字接收流在接收到 FIN 数据包时是否关闭?

c++ - C++ 中的 C99 样式可变长度数组函数签名

c++ - 静态链接cppunit时如何解决 "undefined reference"错误?

c++ - 这个可变参数模板示例有什么问题?

c++ - 我使用 Qt 的多线程应用程序出了什么问题(错误 SIGSEGV)