一、什么是list?
Lists are sequence containers that allow constant time insert and erase operations anywhere within the sequence, and iteration in both directions.
列表是序列容器,允许在序列中的任何位置进行以常量时间插入和擦除操作,以及双向迭代。
简单的来说:list是一个带头双向循环列表;
二、list的使用
2.1 list的构造
list的默认构造:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#include <list>
int main()
{
list<int> list1;
return 0;
}
2.2 、用n的val构造:(其中val的类型是list模版显式实例化的类型)
int main()
{
//list<int> list1;
list<int> list1(3, 3);
list<string> list2(2, "hello");
return 0;
}
2.3、 用迭代器区间构造
int main()
{
//list<int> list1;
//list<int> list1(3, 3);
//list<string> list2(2, "hello");
int arr[4] = { 3,4,5,6 };
list<int> list1(arr, arr + sizeof(arr) / sizeof(int));
return 0;
}
2.4、list的拷贝构造
int main()
{
//list<int> list1;
//list<int> list1(3, 3);
//list<string> list2(2, "hello");
int arr[4] = { 3,4,5,6 };
list<int> list1(arr, arr + sizeof(arr) / sizeof(int));
list<int> list2(list1);
return 0;
}
拷贝后:
三、list的增删查改
3.1、尾插尾删
int main()
{
list<int> list1;
list1.push_back(1);
list1.push_back(2);
list1.push_back(3);
list1.push_back(4);
list1.push_back(5);
list1.pop_back();
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
return 0;
}
3.2 list的头插头删
int main()
{
list<int> list1;
list1.push_front(1);
list1.push_front(2);
list1.push_front(3);
list1.push_front(4);
list1.pop_front();
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
return 0;
}
3.3 list 的任意位置插入
任意位置插入val:
int main()
{
list<int> list1;
list1.push_front(1);
list1.push_front(2);
list1.push_front(3);
list1.push_front(4);
list1.pop_front();
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
list<int>::iterator it = list1.begin();
++it;
list1.insert(it, 6);
for (auto e : list1)
{
cout << e << " ";
}
return 0;
}
注意:第一个参数为const_iterator,第二个参数为list显式实例化的类型;
list的iterator是双向迭代器支持++ -- 但不支持+ -;
任意位置插入n个val:
int main()
{
list<int> list1;
list1.push_back(3);
list1.push_back(4);
list1.push_back(5);
list1.push_back(6);
list1.insert(list1.begin(), 3, 8);
for (auto e : list1)
{
cout << e << " ";
}
return 0;
}
3.4list的任意位置删除
任意位置删除:
int main()
{
list<int> list1;
list1.push_back(3);
list1.push_back(4);
list1.push_back(5);
list1.push_back(6);
list<int>::iterator it1 = list1.begin();
it1++;
it1 = list1.erase(it1);
it1++;
it1 = list1.erase(it1);
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
//cout << *it1 << " ";//报错
return 0;
}
注意:erase返回的是删除的节点下一个节点的迭代器!
四、list的其他成员函数;
4.1 remove函数
作用: 相当于 find + erase ,先查找找到的了就删除,找不到啥事不干;
int main()
{
list<int> list1;
list1.push_back(3);
list1.push_back(4);
list1.push_back(5);
list1.push_back(6);
list1.remove(5);
list1.remove(99);
for (auto e : list1)
{
cout << e << " ";
}
return 0;
}
4.2 splice函数
作用: 把一个链表转移到另一个链表的某个节点下;
int main()
{
list<int> list1;
for (int i = 1; i <= 5; ++i)
{
list1.push_back(i * 10);
}
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
list<int> list2;
for (int i = 1; i <= 5; ++i)
{
list2.push_back(i);
}
for (auto e : list2)
{
cout << e << " ";
}
cout << endl;
list<int> ::iterator it = list1.begin();
++it;
list1.splice(it, list2);
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
return 0;
}
4.3merge函数
作用:归并两个链表
int main()
{
list<int> list1;
for (int i = 2; i < 6; ++i)
{
list1.push_back(i);
}
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
list<int> list2;
for (int i = 4; i < 9; ++i)
{
list2.push_back(i);
}
for (auto e : list2)
{
cout << e << " ";
}
cout << endl;
list1.merge(list2);
for (auto e : list1)
{
cout << e << " ";
}
cout << endl;
return 0;
}
注意:默认按升序归并;
以上是list的基本用法,如果对您有所帮助记得点赞收藏+关注哦!!谢谢!!!
咱下期见!!!