[微信公众号: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容器的相关操作的讲解到此结束,感谢观看!欢迎各位的点赞与关注!您的点赞和关注是我学习更新的动力!