◐ Shell
clean mode source ↗

std::swap_ranges — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

template< class ForwardIt1, class ForwardIt2 > ForwardIt2 swap_ranges( ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2 )

Обмен элементов между диапазоном [first1last1) и другим диапазоном, который начинается с first2. Количество элементов в этих двух диапазонах должно совпадать.

Параметры

[first1last1) два итератора задающих диапазон элементов для обмена
first2 начало второго диапазона для обмена
Требования к типам
-ForwardIt1, ForwardIt2 должен соответствовать требованиям ForwardIterator.
-Тип после разыменовывания ForwardIt1 и ForwardIt2 должен удовлетворять требованиям Swappable

Возвращаемое значение

Итератор, указывающий на элемент, после последнего во втором диапазоне, начинающимся с first2.

Возможная реализация

template<class ForwardIt1, class ForwardIt2>
ForwardIt1 swap_ranges(ForwardIt1 first1,
                             ForwardIt1 last1,
                             ForwardIt2 first2)
{
    while (first1 != last1) {
        std::iter_swap(first1++, first2++);
    }
    return first2;
}

Пример

Демонстрирует обмен поддиапазонов из разных контейнеров

#include <algorithm>
#include <list>
#include <vector>
#include <iostream>
int main()
{
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::list<int> l = {-1, -2, -3, -4, -5};

    std::swap_ranges(v.begin(), v.begin() + 3, l.begin());

    for(int n : v)
       std::cout << n << ' ';
    std::cout << '\n';
    for(int n : l)
       std::cout << n << ' ';
    std::cout << '\n';
}

Вывод:

Сложность

Линейная от расстояния между first и last

См. также

меняет местами элементы, на которые указывают два итератора
(шаблон функции) [править]
меняет местами значения двух объектов
(шаблон функции) [править]