当前位置:  开发笔记 > 编程语言 > 正文

返回'任何类型的输入迭代器'而不是vector :: iterator或list :: iterator

如何解决《返回'任何类型的输入迭代器'而不是vector::iterator或list::iterator》经验,为你挑选了1个好方法。

假设我想在C++中实现一个数据结构来存储面向图.由于STL容器,Arcs将存储在节点中.我希望用户能够以类似STL的方式迭代节点的弧.

我遇到的问题是我不希望在Node类(实际上是一个抽象基类)中公开我将在具体类中实际使用的STL容器.因此,我不希望我的方法返回std :: list :: iterator或std :: vector :: iterator ...

我试过这个:

class Arc;

typedef std::iterator ArcIterator;  // Wrong!

class Node {
public:
  ArcIterator incomingArcsBegin() const {
    return _incomingArcs.begin();
  }
private:
  std::vector _incomingArcs;
};

但这不正确,因为vector :: const_iterator不能用于创建ArcIterator.那么这个ArcIterator可以是什么?

我发现这篇论文关于STL的自定义迭代器,但它没有帮助.我今天一定有点沉重......;)



1> zvrba..:

试试这个:

class Arc;
class Node {
private:
  std::vector incoming_;
public:
  typedef std::vector::iterator iterator;
  iterator incoming_arcs_begin()
  { return incoming_.begin(); }
};

并在其余代码中使用Node :: iterator.当/如果更改容器,则必须在单个位置更改typedef.(您可以使用额外的typedef进一步实现存储,在本例中为vector.)

至于const问题,要么将vector的const_iterator定义为你的迭代器,要么像vector一样定义double迭代器类型(const和非const版本).

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有