Предположим, у меня есть вектор v с m элементами в нем и индекс произвольного доступа к вектору с именем i.
Когда я увеличиваю индекс, если он выходит за границы, я хочу индексировать первый (нулевой) элемент. Точно так же, когда я уменьшаю индекс, если индекс <0, я хочу индексировать до последнего элемента. На данный момент я перемещаюсь через контейнер только по одному элементу за раз, поэтому придумала следующую функцию: </p>
unsigned int GetIndexModM(int index,unsigned int m) {return (index + m) % m;}
Сайт вызова может выглядеть так:
std::vector<Whatever> v = ... // initialise with 5 elements
unsigned int i = 0;
unsigned int j = GetIndexModM(static_cast<int>(i) - 1,v.size()); // get preceeding index
Однако эта функция не будет выполнена, если вычесть значение> m из индекса:
unsigned int j = GetIndexModM(static_cast<int>(i) - 17,v.size()); // oops: returns -2
Мой вопрос: Какая самая элегантная реализация функции, которая принимает любое целое число и возвращает свое место в качестве индекса?