Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Класс list: перенос элементов из одного списка в другой
Выполнить перенос элементов из одного списка в другой позволяет метод splice()
. Прототипы метода:
void splice(const_iterator pos, list &x) noexcept;
void splice(const_iterator pos, list &&x) noexcept;
void splice(const_iterator pos, list &x, const_iterator it) noexcept;
void splice(const_iterator pos, list &&x, const_iterator it) noexcept;
void splice(const_iterator pos, list &x, const_iterator first,
const_iterator last) noexcept;
void splice(const_iterator pos, list &&x, const_iterator first,
const_iterator last) noexcept;
Первые два прототипа переносят все элементы из списка x
в текущий список, и вставляют их перед позицией pos
, на которую указывает итератор. Пример переноса элементов в конец текущего списка:
std::list<int> arr1 = {1, 2, 3}, arr2 = {4, 5, 6};
arr1.splice(arr1.end(), arr2);
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4 5 6
std::cout << arr2.size() << std::endl; // 0
Третий и четвертый прототипы переносят один элемент, на который указывает итератор it
, из списка x
в текущий список и вставляют его перед позицией pos
, на которую указывает итератор. Перенесем второй элемент из списка arr2
в конец списка arr1
:
std::list<int> arr1 = {1, 2, 3}, arr2 = {4, 5, 6};
std::list<int>::iterator it = arr2.begin();
++it;
arr1.splice(arr1.end(), arr2, it);
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 5
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 4 6
Пятый и шестой прототипы переносят элементы, входящие в диапазон, ограниченный итераторами first
и last
, из списка x
в текущий список и вставляют их перед позицией pos
, на которую указывает итератор. Перенесем все элементы, начиная со второго, из списка arr2
в конец списка arr1
:
std::list<int> arr1 = {1, 2, 3}, arr2 = {4, 5, 6};
std::list<int>::iterator it = arr2.begin();
++it;
arr1.splice(arr1.end(), arr2, it, arr2.end());
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 5 6
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 4
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов