Функции из библиотеки стандартных алгоритмов , такие как iota
, sort
, find
, rotate
и copy
сделают вашу жизнь проще. Ваш пример сводится к:
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> indices(15);
std::iota(indices.begin(), indices.end(), 0);
std::sort(indices.begin(), indices.end(), std::greater<>());
auto a = std::find(indices.begin(), indices.end(), 6);
auto b = std::find(indices.begin(), indices.end(), 3);
std::rotate(a, b + 1, indices.end());
std::copy(indices.begin(), indices.end(), std::ostream_iterator<int>(std::cout, "\n"));
return 0;
}
Вывод:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
@TedLyngmo в комментариях показывает, что его можно / нужно улучшить с помощью:
auto a = std::lower_bound(indices.begin(), indices.end(), 6, std::greater<int>{});
auto b = a + 4;