持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
list容器
这是一个双向循环链表,采用的是动态存储分配,不会造成内存浪费和溢出的问题;插入和删除的操作方便,不需要移动大量元素~
PS: 接下来我将会从(list的构造函数)、(list的赋值和交换)、(list的大小操作)、(list插入和删除)、(list的数据存取)、(list的反转和排序)等方面来一一介绍list容器,每个案例都会有代码和图片说明~
list构造函数
- list<T>l;默认构造函数
- list(beg,end);将区间[beg,end)拷贝构造
- list(n,elem);将n个elem构造
- list(const list);拷贝构造
代码
//list构造
void test01() {
//1.默认构造
list<int>l;
for (int i = 1; i <= 10; i++)
l.push_back(i);
display(l);
//2.区间方式
list<int>l2(l.begin(),l.end());
display(l2);
//3.拷贝构造
list<int>l3(l2);
display(l3);
//4.n个elem
list<int>l4(10, 666);
display(l4);
}
结果
list赋值和交换
- assign(beg,end);将[beg,end)赋值给l
- assign(n,elem);将n个elem赋值给l
- =号赋值
- swap(list);将l与list的所有元素交换
代码
//list赋值和交换
void test02() {
list<int>l1;
for (int i = 1; i <= 10; i++)
l1.push_back(i);
display(l1);
//区间赋值
list<int>l2;
l2.assign(l1.begin(), l1.end());
display(l2);
//n个elem
list<int>l3;
l3.assign(10, 6666);
display(l3);
//=赋值
list<int>l4 = l3;
display(l4);
//交换
l4.swap(l1);
display(l4);
}
结果
list大小操作
- size();返回list元素个数
- empty();判断list是否为空
- resize(num);重新指定长度,若变长,则按默认填充;变短,删除
- resize(int num,int elem);重新指定长度,若变长,则按elem填充;变短,删除
代码
//list大小操作
void test03() {
list<int>l1;
for (int i = 1; i <= 10; i++)
l1.push_back(i);
display(l1);
if (l1.empty())
cout << "l1为空!" << endl;
else
cout << "l1的大小为:" << l1.size() << endl;
list<int>l2 = l1;
l1.resize(15);
display(l1);
l1.resize(5);
display(l1);
l2.resize(15, 999);
display(l2);
l2.resize(5);
display(l2);
}
结果
list插入和删除
- push_back(elem);尾加elem
- pop_back();尾减元素
- push_top(elem);头加elem
- pop_top();头减元素
- insert(pos,elem);pos插入elem
- insert(pos,n,elem);pos插入n个elem
- insert(pos,beg,end);pos插入[beg,end)区间数据
- clear();清空
- erase(beg,end);删除[beg,end)数据,返回下一个数据的位置
- erase(pos);删除pos,返回下一个位置
- remove(elem);删除容器中所有与elem值相等的元素
代码
//list插入和删除
void test04() {
list<int>l1;
for (int i = 1; i <= 10; i++)
l1.push_back(i);
display(l1);
l1.insert(++l1.begin(), 4, 99);
display(l1);
//remove
l1.remove(99);
display(l1);
}
结果
list数据存取
- front();头部第一个元素
- back();尾部第一个元素
- 没有[]和at等操作 PS: 由于比较简单,这里不进行代码展示
list反转和排序
- 需要加入<algorithm>头文件
- reserve();将list所有函数反转
- sort();将list所有函数排序(可以借助仿函数更改排序规则)
更改排序规则的仿函数代码
bool myCompare(int v1, int v2) {
//降序 让第一个数大于第二个数
return v1 > v2;
}
总代码
//list反转和排序
void test05() {
list<int>l1;
for (int i = 1; i <= 10; i++)
l1.push_back(i);
display(l1);
l1.push_back(1);
l1.insert(++l1.begin(), 2, 90);
display(l1);
//反转函数
l1.reverse();
display(l1);
//排序函数
l1.sort();
display(l1);
//降序
l1.sort(myCompare);
display(l1);
}
结果
PS:
觉得好就点赞加收藏吧~