ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1063909 Топик полностью
fk0, легенда (24.12.2020 01:39, просмотров: 328) ответил йцyкeн на Пытаюсь вспомнить, когда мне последний раз нужно было поменять три переменные. Кажется, это было до большого взрыва.
std::rotate же! На самом деле полезная вещь. Можно что-то, какие-то записи, которые удобно потом видеть в памяти непрерывным блоком, обычно текст, писать в кольцевой буфер. А потом сделать rotate всего буфера и получить набор данных который начинается строго в начале буфера (на самой старой не перезаписанной поверх другими записи) и кончается где-то незадолго до конца. 

Ну и с тремя переменными тоже работает... Вон там swap как раз в середине.


template <class ForwardIterator>
  void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last)
{
  ForwardIterator next= middle;

  while (first != next)
  {
    swap (*first++, *next++);

    if(next == last)
        next= middle;
    else if (first==middle)
        middle= next;
  }
}

https://en.cppreference.com/w/cpp/algorithm/rotate

[ZX]