在自定义迭代器中包装STL容器的最佳方法是什么?

mag*_*nus 6 c++ containers iterator template-meta-programming

为了说明,假设我有一个自定义容器而不是std::vector内部使用STL .如果我将typedef std::vector<char*>::iterator改为my_container::iterator,那么取消引用迭代器将返回一个char*.但是,我的自定义容器应该隐藏其内部,这意味着我想要一个解除引用来返回一个char.

如何实现这一目标?

class my_container {
public:

    typedef std::vector<char*> vector;

private:

    vector vec_;

};
Run Code Online (Sandbox Code Playgroud)

更新: char*是一个例子.它不代表C字符串; 一个例子会更清楚int.

此外,我想使用std::forward_iterator_tag,std::iterator因为这似乎是一个更标准/当前的方法.

Ton*_*roy 5

如果您想要自己的迭代器,只需将其作为嵌套类开始编写即可.这将需要一个包std::vector<char*>::iterator,拦截通常的操作(例如++,*,--),是这样的:

class iterator
{
  public:
    iterator& operator++() { ++i_; return *this; }
    char& operator*() { return **i_; }
    ...etc...

  private:
    std::vector<char*>::iterator i_;
};
Run Code Online (Sandbox Code Playgroud)

如果您尝试并卡住,请发布您的尝试,我们会进一步帮助您.