Есть ли в C ++ std :: advance реализация, Нужно судить о признаке & quot; Расстояние & quot; параметр?

Я недавно узнал о некоторых внутренних std :: алгоритма
std :: advance получает тип числа «Расстояние», я полагаю, что его внутренняя реализация должна выглядеть так: (тег-диспетчеризация предлагается [Effective C ++])

template<class InputIt, class Distance>
void advance(InputIt& it, Distance n>
{
advance_impl(it, n, Iterator_trait<InputIt>::categary)
}

Iterator_trait должен помочь сделать тэг-рассылку и сообщить категории итератора, будь то произвольный доступ или последовательный
Таким образом, для категории произвольного доступа, «Impl» должен выглядеть

template<class InputIt, class Distance>
void advance_impl(InputIt& it, Distance n>
{
it = it +n
}

И для категории none-random_access, impl должен выглядеть следующим образом? (только мое предположение)

template<class InputIt, class Distance>
void advance_impl(InputIt& it, Distance n>
{
if(n==0)return
else if(n>0)
{
for(Distance d=0;d<n;++d)
++it
}
else
{
for(Distance d=0;d<n;++d)
--it;
}
}

Это только мое предположение, мне интересно, если реализация STL действительно нужно судить, если n = 0,> 0,<0 как для разных случаев.

Моя предполагаемая реализация должна быть слишком сложной.
Но что является более изящной реализацией, когда итератор не относится к категории произвольного доступа.

Я полагаю, что для цикла необходим там, как насчет знака «Расстояние»?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]