C++ 迭代器如何实现 next() 和 previous() 函数

C++ iterators how to implement next() and previous() functions

我正在编写一个包含事物向量的实用程序 class。我想向调用者 classes 提供访问器导航功能。例如,

class MyIterator {

public:
  typedef std::vector<someObj>::iterator itr;

  itr next() { return things_.begin(); }
  itr next(itr) { return std::next(itr); }

private:
  std::vector<someObj> things_;
}

我这里有两个问题:

当然,我在这里遗漏了一些东西...

你做的不对。您真正需要导出的只是 begin() 和 end()。

#include <vector>
#include <algorithm>

struct SomeObj
{
  int i;
};

class MyVector {

public:
  using itr = std::vector<SomeObj>::iterator;
  using citr = std::vector<SomeObj>::const_iterator;

  itr begin() { return things_.begin(); }
  itr end()   { return things_.end(); }
  citr begin() const { return things_.begin(); }
  citr end() const   { return things_.end(); }

private:
  std::vector<SomeObj> things_;
};

int main()
{
    MyVector objs;
    for (auto& obj : objs)
    {
    // ....
    }

    std::for_each(objs.begin(), objs.end(), [](auto& o) { o.i = 1;});

    for (auto i = objs.begin(); i != objs.end(); ++i)
    {
       i->i = 1;
    }

    return 0;
}