C++高级学习:第十节-list容器(下)

  [微信公众号:Cpp入门到精通]有完整六十六节知识,STL知识总结,欢迎关注学习!!

  上节我们介绍了有关list容器的一些操作,这节我们继续讲有关list容器的其他操作。

5.反转容器:

在C++中,使用reverse()实现反转容器。


list<int>l1={10,20,30,40,50};
  print(l1);
  l1.reverse();
  print(l1);

结果如下:


10 20 30 40 50
50 40 30 20 10

6.大小和空判断:


list<int>l1={10,20,30,40,50};
  print(l1);
  cout << "l1的大小为:" << l1.size() << endl;
  cout << (l1.empty() ? "容器为空":"容器不为空") << endl;

结果如下:

10 20 30 40 50
l1的大小为:5
容器不为空

7.交换内容:

可以使用swap()函数来交换两个容器中的元素。


list<int>l1={10,20,30,40,50};
  print(l1);
  list<int>l2(4, 12);
  l1.swap(l2);
  cout << "l1=";
  print(l1);
  cout << "l2=";
  print(l2);

结果如下:


10 20 30 40 50
l1=12 12 12 12
l2=10 20 30 40 50

8.排序:

使用list容器的sort()成员函数来对列表进行排序。这个函数默认使用元素的小于运算符进行比较,即使用升序排列。如果要使用降序排列则使用l1.sort(greater<int>())。


list<int>l1={20,40,10,30,50};
  print(l1);
  cout << "使用sort()升序排列:";
  l1.sort();//等价于l1.sort(less<int>();
  print(l1);
  cout << "使用sort()=降序排列:";
  l1.sort(greater<int>());
  print(l1);

结果如下:


20 40 10 30 50
使用sort()升序排列:10 20 30 40 50
使用sort()=降序排列:50 40 30 20 10

9.合并和拆分:

list容器提供了merge()函数用于合并两个有序的列表,以及splice()函数用于将一个列表的一部分或整个列表拆分到另一个位置。


list<int>l1={10,20,30,40,50};
  list<int>l2 = {1,2,3,4,5};
  l1.merge(l2);
  print(l1);

将l2合并到l1中,此时l2就是空的了,而l1中有10个元素,且是有序的。


1 2 3 4 5 10 20 30 40 50

接下来看一下splice()函数的操作方式:


list<int>l1={10,20,30,40,50};
  list<int>l2 = {1,2,3,4,5};
  l1.merge(l2);
  print(l1);
  list<int>l3;
  list<int>::iterator it = l1.begin();
  // 可以使用advance()将迭代器移动到第三个元素位置
  advance(it, 5);
  l2.splice(l2.begin(), l1,it, l1.end());
  print(l2);
  print(l1);

splice()函数的第一个参数是目标位置的迭代器,接下来的两个参数是源列表的起始和结束位置。使用advance函数可以移动迭代器的位置,正数向右移动,负数为左移。l2.splice(l2.begin(), l1,it,l1.end());表示将l1容器中下表为5开始,到容器尾的这段部分拆分给l2,即{10,20,30,40,50},剩余元素留在l1中,结果如下:


1 2 3 4 5 10 20 30 40 50
10 20 30 40 50
1 2 3 4 5

那么我们要如何选用容器呢?

如果需要在容器中间频繁进行插入和删除操作,并且不太需要随机访问,那么可以考虑使用 容器list;如果需要在两端高效地进行插入和删除操作,并且需要随机访问,那么deque可能更加适合。

list容器的相关操作的讲解到此结束,感谢观看!欢迎各位的点赞与关注!您的点赞和关注是我学习更新的动力!

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值