Пространства имён
Варианты
Действия

std::swap_ranges

Материал из cppreference.com
< cpp‎ | algorithm
 
 
Алгоритмы
Функции
Немодифицирующие линейные операции
Модифицирующие линейные операции
Разделение
Сортировка (на отсортированных промежутках)
Бинарный поиск (на отсортированных промежутках)
Множества (на отсортированных промежутках)
Куча
Минимум/максимум
Числовые операции
Библиотека C
 
Определено в заголовочном файле <algorithm>
template< class ForwardIt1, class ForwardIt2 >
ForwardIt2 swap_ranges( ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2 )

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

Содержание

[править] Параметры

first1, last1 - первый диапазон для обмена
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';
}

Вывод:

-1 -2 -3 4 5
1 2 3 -4 -5

[править] Сложность

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

[править] См. также

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