簡體   English   中英

如何編寫標准的C ++迭代器?

[英]How to write standard C++ iterator?

我有以下簡單的Graph類,其中對於每個Node ,我存儲一組傳出的Arcs

#include <iostream>
#include <vector>
#include <map>
#include <set>

struct Arc {
  char label;
  int targetNode;
};

struct Graph {
  std::vector<int> nodes;
  std::map< int, std::set<Arc*> > outgoingArcsPerNode;
};

如何在圖中的所有弧上提供標准C ++ iterator (迭代次序無關緊要),隱藏弧如何存儲在圖中?

我想使用它類似於以下內容:

int main() {
  Graph g;
  for (Graph::const_iterator it = g.arcsBegin(); it != g.arcsEnd(); ++it) {
    Arc* a = *it;
  }
}

我聽說過boost::iterator ,但我發現它令人困惑。 也許有人可以提示如何在這種情況下使用它?

如果您不想使用boost,請查看迭代器必須提供的內容: STL文檔

否則,您可以使用boost迭代器庫 請參閱iterator_facade教程 ,該教程非常接近您的要求。

創建內部有兩個迭代器的類:一個在地圖上,另一個在集合上。

每個++都應用於設置迭代器。 當它到達結尾時,增加map迭代器並重新初始化set iterator。

您也可以使用boost :: iterator_facade - 它將無助於實現迭代算法,但會最大限度地減少您使迭代器與STL期望兼容的努力......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM