2.链表容器list

list容器的一些常见用法:

1.在list的开头或者末尾添加一个元素

list<int> ls;
ls.push_front(8);
ls.push_back(7);
//下面这样写也可以
ls.emplace_front(8);
ls.emplace_back(7);
//这两种都可以,后一种在某些时候更加高效

2.在list中插入元素

list<int> ls = {1, 2};
(1)在开头或末尾插入
ls.insert(ls.begin(), 6); //在开头插入6
ls.insert(ls.begin(), 3, 7); //在开头插入三个7

ls.insert(ls.end(), 10); //在末尾插入10
ls.insert(ls.end(), 4, 9); //在末尾插入四个9

(2)在中间某个位置插入[使用迭代器进行操作]
list<int>::iterator it1 = ls.begin(), it2 = ls.begin();
advance(it1, 4);   //将迭代器移动至第四位后
ls.insert(it1, 8); //在迭代器位置插入8,完成后8成为第五位

advance(it2, 6); //将迭代器移动至第六位后
ls.insert(it2, 5, 0); //在迭代器位置插入五个0,完成后从第七位开始有连续的五个0

3.删除list的开头第一个元素或末尾最后一个元素

ls.pop_front(); //删除第一个
ls.pop_back(); //删除最后一个

4.删除list某一指定位置元素

(1)删除开头的元素
ls.erase(ls.begin());

(2)删除末尾的元素
ls.erase(ls.end());

(3)使用迭代器删除中间某个位置的元素
list<int>::iterator it = v.begin();
advance(it,3); //将迭代器从第一位向后移动三个位置,完成后迭代器处于第四位
ls.erase(it); //使用迭代器删除第四个元素

5.list删除某个范围内的元素

list<int> ls = {1, 2, 3, 4, 5, 6, 7, 8, 9};
list<int>::iterator it1 = ls.begin(), it2 = ls.begin();
advance(it1, 1), advance(it2, 4); //完成后迭代器位于第二和第五个位置
ls.erase(it1, it2); //区间左开右闭,删除位置从二到四的元素

6.list删除某一指定值元素

ls.erase(remove(ls.begin(), ls.end(), 0), ls.end()); //删除list容器中所有的0

7.清空整个list

ls.clear();

8.判断list是否为空

ls.empty();

9.list中查找某一元素

list<int> ls = {1, 2, 3, 4, 5};
list<int>::iterator it = find(ls.begin(), ls.end(), 6);
if (it != ls.end()) cout << "Yes";
else cout << "No";
//如果迭代器的返回值为ls.end(),则表示查找失败,否则表示查找成功,此例子中明显查找不到,所以输出为NO

10.对list进行排序

ls.sort(); //从小到大排序
ls.sort(greater<int>()); //从大到小排序
ls.sort(cmp); //对list自定义排序,cmp为你自己定义的排序函数(准则)

11.对list进行逆置

ls.reverse();
//下面这样写也可以
reverse(ls.begin(), ls.end());

12.对list进行遍历

//list和vector不同,无法使用下标的形式进行遍历,只能使用迭代器
list<int> ls = {2, 3, 1, 5, 4};
list<int>::iterator it; //首先定义迭代器
for (it = ls.begin(); it != ls.end(); it++) cout << *it << " "; //正序遍历
for (it = ls.end(); it != ls.begin(); ) cout << *(--it) << " "; //逆序遍历
//也可以利用反向迭代器进行逆序的遍历,方法如下:
list<int>::reverse_iterator it;
for (it = ls.rbegin(); it != ls.rend(); it++) cout << *it << " ";

13.交换两个list

ls1.swap(ls2);
//使用下面这种写法也可以
swap(ls1, ls2);

14.将两个无序list合并为一个有序list

方法(1)
ls1.sort(), ls2.sort(); //先分别给两个list排序
ls1.merge(ls2); //使用list容器自带的merge函数将ls2合并入ls1中,完成后ls2将被释放,即此时ls2为空

方法(2)
ls1.merge(ls2); //先将ls2并入ls1
ls1.sort(); //再给ls1排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值