链表
链表(list容器类):#include<list>,是一种双线性列表,只能顺序访问(从前向后或者从后向前)。
list 的数据组织形式
与前面两种容器类有一个明显的区别就是:它不支持随机 访问。要访问表中某个下标处的项需要从表头或表尾处 (接近该下标的一端)开始循环。而且缺少下标运算符: operator[] 。
在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针。
<list> 内部实现: 双向链表
list<T, Alloc>
支持操作:
begin(), end(), size(), clear(), empty()
push_back(), pop_back()
push_front(), pop_front()
insert() O(1)
erase() O(1)
sort() O(nlogn),不同于<algorithm>中的sort
list仍然包含了erase(),begin(),end(),insert(),push_back(),push_front()这些基本函数,下面我们来演示一下list的其他函数功能。
merge():合并两个排序列表;
sort():列表的排序;
list举例
#include <iostream>
#include <string>
#include <list>
using namespace std;
void PrintIt(list<int> n)
{
for (list<int>::iterator iter = n.begin(); iter != n.end(); ++iter)
cout << *iter << " "; //用迭代器进行输出循环
cout << endl;
}
int main(void)
{
list<int> listn1, listn2;
//给listn1,listn2初始化
listn1.push_back(123);
listn1.push_back(0);
listn1.push_back(34);
listn1.push_back(1123);
//now listn1:123,0,34,1123
listn2.push_back(100);
listn2.push_back(12);
PrintIt(listn1);
PrintIt(listn2);
//now listn2:100,12
listn1.sort();
listn2.sort();
//给listn1和listn2排序
//now listn1: 0,34,123,1123 listn2: 12,100
PrintIt(listn1);
PrintIt(listn2);
listn1.merge(listn2);
//合并两个排序列表后,listn1: 0,12,34,100,123,1123
PrintIt(listn1);
cin.get(); // 这个和getchar()类似?
}