Класс forward_list: перенос элементов из одного списка в другой

Выполнить перенос элементов из одного списка в другой позволяет метод splice_after(). Прототипы метода:

void splice_after(const_iterator pos, forward_list &x) noexcept;
void splice_after(const_iterator pos, forward_list &&x) noexcept;
void splice_after(const_iterator pos, forward_list &x,
                  const_iterator it) noexcept;
void splice_after(const_iterator pos, forward_list &&x,
                  const_iterator it) noexcept;
void splice_after(const_iterator pos, forward_list &x,
                  const_iterator before, const_iterator last) noexcept;
void splice_after(const_iterator pos, forward_list &&x,
                  const_iterator before, const_iterator last) noexcept;

Первые два прототипа переносят все элементы из списка x в текущий список, и вставляют их после позиции pos, на которую указывает итератор. Пример переноса элементов в начало текущего списка:

std::forward_list<int> arr1 = {1, 2, 3}, arr2 = {4, 5, 6};
arr2.splice_after(arr2.before_begin(), arr1);
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl;                // 1 2 3 4 5 6
std::cout << std::distance(arr1.begin(), arr1.end())
          << std::endl; // 0

Третий и четвертый прототипы переносят один элемент следующий за элементом, на который указывает итератор it, из списка x в текущий список и вставляют его после позиции pos, на которую указывает итератор. Перенесем второй элемент из списка arr2 в начало списка arr1:

std::forward_list<int> arr1 = {1, 2, 3}, arr2 = {4, 5, 6};
arr1.splice_after(arr1.before_begin(), arr2, arr2.begin());
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl;                // 5 1 2 3
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl;                // 4 6

Пятый и шестой прототипы переносят элементы, входящие в диапазон, ограниченный итераторами before и last (не включая элементы, на которые ссылаются итераторы), из списка x в текущий список и вставляют их после позиции pos, на которую указывает итератор. Перенесем все элементы, начиная со второго, из списка arr2 в начало списка arr1:

std::forward_list<int> arr1 = {1, 2, 3}, arr2 = {4, 5, 6};
arr1.splice_after(arr1.before_begin(), arr2,
                  arr2.begin(), arr2.end());
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl;                // 5 6 1 2 3
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl;                // 4

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов