std::swap_ranges
Материал из cppreference.com
Defined in header <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
[править]См. также
обмен элементов, на которые указывают итераторы (шаблон функции) | |
обмен значения двух объектов (шаблон функции) |