Функция inplace_merge
Функция inplace_merge объединяет два
последовательных отсортированных диапазона,
расположенных внутри одного контейнера, в один
отсортированный диапазон. Первым параметром
функция принимает итератор на начало первого
диапазона, вторым - итератор на начало второго
диапазона (он же конец первого), а третьим -
итератор на конец второго диапазона. Четвертым
необязательным параметром можно передать
функцию сравнения. В отличие от merge,
данная функция выполняет слияние прямо в
исходном контейнере, не требуя дополнительной
памяти.
Синтаксис
inplace_merge(first, middle, last)
inplace_merge(first, middle, last, comp)
Пример
Давайте объединим два отсортированных
диапазона вектора: первый от начала до
элемента 3 и второй от элемента 3
до конца:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vec = {1, 3, 5, 2, 4, 6};
inplace_merge(vec.begin(), vec.begin() + 3, vec.end());
for (int el : vec) {
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
1 2 3 4 5 6
Пример
Давайте объединим два диапазона в порядке
убывания, передав функцию сравнения
greater:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
vector<int> vec = {5, 3, 1, 6, 4, 2};
inplace_merge(vec.begin(), vec.begin() + 3, vec.end(), greater<int>());
for (int el : vec) {
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
6 5 4 3 2 1
Смотрите также
-
функция
merge,
которая объединяет два отсортированных диапазона в новый -
функция
sort,
которая сортирует элементы диапазона -
функция
stable_sort,
которая устойчиво сортирует элементы диапазона -
функция
is_sorted,
которая проверяет, отсортирован ли диапазон