目录
一、list介绍
1、list是序列容器,允许在序列中的任何位置执行固定O(1)时间复杂度的插入和删除操作,并在两个方向进行迭代。
2、list容器使用双链表实现;双链表将每个元素存储在不同的位置,每个节点通过next,prev指针链接成顺序表。
3、list与其他标准序列容器(array,vector和deque)相比,list通常可以在容器内的任何位置插入、提取和移动元素。
4、list与其他标准序列容器(array,vector和deque)相比,list和forward_list(单链表实现)的主要缺点是他们不能通过位置直接访问元素;例如,要访问列表中的第五个元素,必须从已知位置(开始或结束)迭代到该位置,需要哦线性时间开销。
5、存储密度低,list要使用一些额外的内容空间(next,prev)来保持与每个元素相关联(前后续的线性)的链接信息,从而导致存储小元素类型(如char,short,int等)的列表的存储密度低。
二、list的函数
2.1成员类型
2.2 元素访问
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> list1 = { 12,23,34 };
cout << "list1.front():" << list1.front() << endl;
cout << "list1.back():" << list1.back() << endl;
return 0;
}
2.3构造函数
#include <iostream>
#include <list>
using namespace std;
template<class T>
void Print(const list<T>& my)
{
typename list<T>::const_iterator it = my.begin();
for (; it != my.end(); it++)
{
cout << *it << "\t";
}
cout << endl;
}
int main()
{
list<int> list1 = { 12,23,34 };
list<int> list2(3, 11);
list<int> list3(list2);
list<string> list4 = { "This","is","windows" };
list<string> list5;
list<string> list6;
list5 = list4;
list6.assign(3, "This");
Print(list1);
Print(list2);
Print(list3);
Print(list4);
Print(list5);
Print(list6);
return 0;
}
2.4list迭代器
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> list1 = { 12,23,34 };
list<int>::const_iterator it1 = list1.begin();
for (; it1 != list1.end(); it1++)
{
cout << *it1 << "\t";
}
cout << endl;
list<int>::reverse_iterator it2 = list1.rbegin() ;
for (; it2 != list1.rend(); it2++)
{
cout << *it2 << "\t";
}
cout << endl;
return 0;
}
2.5容量
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> list1 = { 12,23,34 };
cout << "list1.empty():" << list1.empty() << endl;
cout << "list1.size():" << list1.size() << endl;
cout << "list1.max_size():" << list1.max_size() << endl;
return 0;
}
2.6修改器
#include <iostream>
#include <list>
using namespace std;
template<class T>
void Print(const list<T>& my)
{
typename list<T>::const_iterator it = my.begin();
for (; it != my.end(); it++)
{
cout << *it << "\t";
}
cout << endl;
}
int main()
{
list<int> list1 = { 12,23,34 };
list<int> list2 = { 1,2,3,4,5 };
Print(list1);
Print(list2);
auto it = list1.begin();
list1.insert(it, 55);
Print(list1);
it++;
list1.insert(it, 3, 55);
Print(list1);
list1.erase(it);
Print(list1);
list1.swap(list2);
Print(list1);
Print(list2);
return 0;
}
2.7操作及功能
#include <iostream>
#include <list>
using namespace std;
template<class T>
void Print(const list<T>& my)
{
typename list<T>::const_iterator it = my.begin();
for (; it != my.end(); it++)
{
cout << *it << "\t";
}
cout << endl;
}
int main()
{
list<int> list1 = { 2,1,9,5,3,7 };
list<int> list2 = { 1,8,3,6,0,1,5 };
Print(list1);
Print(list2);
list1.sort();
list2.sort();
Print(list1);
Print(list2);
list2.unique();
Print(list2);
list1.merge(list2);
Print(list1);
Print(list2);
return 0;
}