🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
测试代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<list>
using namespace std;
void test_list1()
{
list<int> lt1 = { 10,2,3,3,4,3,5,6 };
list<int>::iterator it = lt1.begin();
while (it != lt1.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
int main()
{
test_list1();
return 0;
}
通过这段代码,我们可以看到list的基本功能使用。
遍历功能:
while (it != lt1.end())
{
cout << *it << " ";
it++;
}
cout << endl;
for (auto e : lt1)
{
cout << e << " ";
}
cout << endl;
前面我们所用到的迭代器遍历和范围for都是在这里适用的。
排序功能
lt1.sort(greater<int>());
for (auto e : lt1)
{
cout << e << " ";
}
cout << endl;
lt1.sort();
for (auto e : lt1)
{
cout << e << " ";
}
cout << endl;
在这里,我们其实可以看到关于链表的sort的使用,如果什么都不加的时候,那么会将链表按照升序排序,如果想要按照降序排序,那么则需要在括号里面加入greater<int>();
去掉相同的节点
for (auto e : lt1)
{
cout << e << " ";
}
cout << endl;
vector和list
有同学觉得这两个的sort时间相差不多吗?让我们来验证一下
void test_op1()
{
srand(time(0));
const int N = 1000000;
list<int> lt1;
list<int> lt2;
vector<int> v;
for (int i = 0; i < N; i++)
{
auto e = rand() + 1;
lt1.push_back(e);
v.push_back(e);
}
int begin1 = clock();
//排序
sort(v.begin(), v.end());
int end1 = clock();
int begin2 = clock();
lt1.sort();
int end2 = clock();
cout << end1 - begin1 << endl;
cout << end2 - begin2 << endl;
}
其实我们在这里可以明确的是,list的时间是远远大于vector的,因为毕竟list的底层是归并排序,而且需要对指针进行操作。
剪切操作:splice
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int> mylist1, mylist2;
list<int>::iterator it;
for (int i = 1; i <= 4; i++)
{
mylist1.push_back(i);
}
for (int i = 1; i <= 3; i++)
{
mylist2.push_back(i * 10);
}
it = mylist1.begin();
++it;
mylist1.splice(it, mylist2);
for (auto e : mylist1)
{
cout << e << " ";
}
cout << endl;
for (auto e : mylist2)
{
cout << e << " ";
}
cout << endl;
return 0;
}
我们将mylist2中的元素粘贴到了mylist1中,并且删除了mylist2中的这些元素。
所以,我们打印出来的结果是这样子的。
针对自己的剪切操作
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int> mylist1;
for (int i = 1; i <= 4; i++)
{
mylist1.push_back(i);
}
auto it = find(mylist1.begin(), mylist1.end(),3);
for (auto e : mylist1)
{
cout << e << " ";
}
cout << endl;
mylist1.splice(mylist1.begin(), mylist1,it);
for (auto e : mylist1)
{
cout << e << " ";
}
cout << endl;
return 0;
}