Я не могу использовать итератор без наличия метода .end (), верно?
Нет.Вы можете использовать итератор с результатом вызова функции .end ().Вам не нужно продолжать вызывать функцию .end () ... так что если вы просто сохраните оба итератора, то вы золотые.
Я не могу использовать вектор один (если толькоможет быть, я начну удалять его данные).
Не один, а с индексом std :: size_t, тогда это все, что вам нужно.и вектор и итератор, но есть ли лучший способ?Что бы вы сделали?
Если вам не нужно беспокоиться о поддержке других типов контейнеров, я бы использовал:
template<typename T> struct CALLBACK_DATA
{
std::vector<T>* array;
std::size_t index;
};
Если вам может потребоваться поддержка нескольких контейнеровтипов, тогда я бы использовал:
template<typename T> struct CALLBACK_DATA
{
typedef std::vector<T> container_type;
typedef typename std::vector<T>::const_iterator const_iterator;
const_iterator current;
const_iterator end;
};
Итак, да, я бы либо передал вектор и индекс, либо пару итераторов, и я бы создал структуру для хранения данных.Если вы хотите избежать создания структуры, вы можете использовать std::pair
, однако я лично считаю, что проще создать пользовательскую структуру для хранения этой информации.