std::swap_ranges
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <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
См. также
| меняет местами элементы, на которые указывают два итератора (шаблон функции) | |
| меняет местами значения двух объектов (шаблон функции) |