Предположим, я хочу реализовать на C++ структуру данных для хранения ориентированных графов. Дуги будут храниться в узлах благодаря контейнерам STL. Я бы хотел, чтобы пользователи могли выполнять итерацию по дугам узла, похожим на STL.Возвращение «любого итератора ввода» вместо вектора :: итератор или список :: итератор
Проблема, которую я имею, заключается в том, что я не хочу раскрывать класс Node (который фактически будет абстрактным базовым классом), который я использую в конкретном классе. Поэтому я не хочу, чтобы мои методы возвращают зЬй :: список :: итератор или зЬй :: вектор :: итератор ...
Я попытался это:
class Arc;
typedef std::iterator<std::random_access_iterator_tag, Arc*> ArcIterator; // Wrong!
class Node {
public:
ArcIterator incomingArcsBegin() const {
return _incomingArcs.begin();
}
private:
std::vector<Arc*> _incomingArcs;
};
Но это не правильно, потому что вектор :: const_iterator не может использоваться для создания ArcIterator. Так какой может быть этот ArcIterator?
Я нашел эту статью около Custom Iterators for the STL, но это не помогло. Я должен быть немного тяжелым сегодня ...;)
Я был очень доволен 'boost: graph'. Если вы действительно пишете адаптеры для графических структур, рассмотрите их использование. –
[Я задал аналогичный вопрос некоторое время назад] (http: // stackoverflow.com/questions/9938/generic-iterator) – Mark