Можно ли получить std::vector‹T›::const_iterator из индекса мультииндексного контейнера?

Я преобразовываю некоторый код в системе, которая обслуживает пользовательский интерфейс с помощью перечислителя. К сожалению, перечислитель был разработан на основе std::vector<T>::const_iterator. То есть он принимает начальный и конечный итератор типа std::vector<T>::const_iterator.

Я хотел бы преобразовать базовый контейнер источника данных из вектора в мультииндексный контейнер повышения. Это работает хорошо, пока мне не придется обслуживать счетчик.

Мой вопрос: возможно ли преобразовать итератор индекса контейнера с несколькими индексами в std::vector<T>::const_iterator?


person MM.    schedule 17.04.2014    source источник
comment
Упс. Есть причина не использовать детали реализации в интерфейсе. Если вам повезет (например, в зависимости от типа элемента вектора), вы сможете создать гибрид, используя Boost Intrusive, используя вектор в качестве основы. (Это требует, чтобы вы изменили тип элемента с помощью хуков для Boost Intrusive.)   -  person sehe    schedule 17.04.2014
comment
По поводу деталей реализации в интерфейсе - не могу с вами не согласиться.   -  person MM.    schedule 17.04.2014


Ответы (1)


Нет, это невозможно; векторы являются непрерывными контейнерами, но даже индексы произвольного доступа не обеспечивают непрерывность данных.

Вам нужно либо сохранить индексы, внешние по отношению к вектору, либо воссоздать вектор по мере необходимости.

person ecatmur    schedule 17.04.2014