在C ++ STL中列出splice()函数

在本文中,我们将讨论C ++ STL中list::splice()函数的工作,语法和示例。

什么是STL中的列表?

列表是一种数据结构,可以按时间顺序在任何位置进行恒定的插入和删除。列表被实现为双向链接列表。列表允许非连续的内存分配。与数组,向量和双端队列相比,列表在容器中的任何位置执行元素的插入提取和移动效果都更好。在列表中,直接访问该元素的速度很慢,并且列表类似于forward_list,但是转发列表对象是单个链接列表,并且只能迭代转发。

list::splice()是什么?

list::splice()是C ++ STL中的内置函数,在<list>头文件中声明。splice()用于将元素从一个列表容器转移到特定位置的另一个列表容器。此功能将内容插入列表,然后从另一个列表中删除那些内容,从而修改两个列表的大小。

语法

This function’s syntax can be defined as 3 ways:
list1.splice(position, list2);
list1.splice(position, list2, i);
list1.splice(position, list2, first, last);

参数

  • position-我们希望元素被转移到的列表位置。

  • list2-我们要从中传输元素的列表。

  • i:这是一个迭代器,用于指定list2的位置,从该位置我们要转移的元素到list2的末尾。

  • 首先,最后-这两个都是迭代器,它们定义了我们要从中传输元素的list2的开始和结束位置。

示例

Input: list<int> List_container= { 10, 11, 13, 15};
      list<int> List2 = {1, 2, 3, 4};
      List_container.splice(2, List2);
Output:
      List_container= 10 11 13 15 3 4
      List2 = 1 2

返回值

该函数返回指向列表的最后一个元素的反向迭代器。反向迭代器是向后移动的迭代器。

#include <bits/stdc++.h>
using namespace std;
int main(){
   list<int> myList_1 = { 10, 20, 30, 40 };
   list<int> myList_2 = { 50, 60 };
   list<int>::iterator i;
   i = myList_2.begin();
   myList_1.splice(myList_1.end(), myList_2, i);
      cout<<"list after splice operation" << endl;
   for (auto temp : myList_1)
      cout << temp << " ";
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

list after splice operation
10 20 30 40 50

示例

#include <bits/stdc++.h>
using namespace std;
int main(){
   list<int> myList_1 = { 10, 20};
   list<int> myList_2 = { 30, 40, 50};
   list<int> myList_3 = {60};
   myList_1.splice(myList_1.begin(), myList_2);
      cout << "list 1 after splice operation" << endl;
   for (auto x : myList_1)
      cout << x << " ";
   myList_3.splice(myList_3.end(), myList_1);
      cout << "\nlist 3 after splice operation" << endl;
   for (auto x : myList_3)
      cout << x << " ";
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

list 1 after splice operation
30 40 50 10 20
list 1 after splice operation
60 30 40 50 10 20