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

std::forward_list::merge

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

 
 
 
 
void merge( forward_list& other );
(1) (начиная с C++11)
void merge( forward_list&& other );
(1) (начиная с C++11)
template <class Compare>
void merge( forward_list& other, Compare comp );
(2) (начиная с C++11)
template <class Compare>
void merge( forward_list&& other, Compare comp );
(2) (начиная с C++11)
Слияние двух отсортированных списков в один. Списки должны быть отсортированы в порядке возрастания.
Оригинал:
Merges two sorted lists into one. The lists should be sorted into ascending order.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Элементы не копируются. Контейнер other становится пустым после операции. Функция ничего не делает, если this == &other. Если get_allocator() != other.get_allocator(), поведение не определено. Нет итераторы или ссылки стали недействительны, кроме того, что итераторы переехал элементы теперь обратиться в *this, а не в other. Первый вариант используется operator< для сравнения элементов, вторая версия использует данную функцию сравнения comp.
Оригинал:
No elements are copied. The container other becomes empty after the operation. The function does nothing if this == &other. If get_allocator() != other.get_allocator(), the behavior is undefined. No iterators or references become invalidated, except that the iterators of moved elements now refer into *this, not into other. The first version uses operator< to compare the elements, the second version uses the given comparison function comp.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

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

other
другой контейнер для объединения
Оригинал:
another container to merge
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
comp объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если первый аргумент "меньше", чем второй.

Определение сравнения должно быть эквивалентно:

bool cmp(const Type1 &a, const Type2 &b);

Использование noexcept (начиная с C++11) желательно но не обязательно. Параметры не обязаны передаваться по const&, но не должны модифицироваться. Они должны быть способны принимать все значения типа (даже const) Type1 и Type2 независимо от категории значений (таким образом, Type1& не допускается, равно как и Type1, если только для Type1 перемещение не эквивалентно копированию (начиная с C++11)). Типы Type1 и Type2 должны быть таковы, что объект типа forward_list<T,Allocator>::const_iterator может быть разыменован и затем неявно преобразован в оба из них.

[править] Возвращаемое значение

(Нет)

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

#include <iostream>
#include <forward_list>
 
std::ostream& operator<<(std::ostream& ostr, const std::forward_list<int>& list)
{
    for (auto &i : list) {
        ostr << " " << i;
    }
    return ostr;
}
 
int main()
{
    std::forward_list<int> list1 = { 5,9,0,1,3 };
    std::forward_list<int> list2 = { 8,7,2,6,4 };
 
    list1.sort();
    list2.sort();
    std::cout << "list1:  " << list1 << "\n";
    std::cout << "list2:  " << list2 << "\n";
    list1.merge(list2);
    std::cout << "merged: " << list1 << "\n";
}

Вывод:

list1:   0 1 3 5 9
list2:   2 4 6 7 8
merged:  0 1 2 3 4 5 6 7 8 9

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

в большинстве сравнений size() + other.size() - 1.
Оригинал:
at most size() + other.size() - 1 comparisons.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

перемещает элементы из другого forward_list
(public функция-элемент) [править]