List又叫链表,是一种双线性列表,和vector一样,都是顺序容器,只能顺序访问(从前向后或者从后向前)。与vector容器类有一个明显的区别就是:它不支持随机访问。要访问表中某个下标处的项需要从表头或表尾处(接近该下标的一端)开始循环。而且缺少下标预算符:operator[]。
下面通过一个实例来了解一下:
#include "stdafx.h"
#include <list>
#include <string>
#include <iostream>
using namespace std;
int ar[20] = {
12, 45, 100, 23, 22,
35, 63, 11, 2, 55,
3, 12, 66, 88, 70,
33, 33, 24, 75, 16 };
char* str = "Hello World";
void showVector(string infos,list <int> list1);
void showVector(string infos,list <int> list1){
infos=infos+"list1:";
cout<<endl<<infos<<endl;
for(list<int>::const_iterator p=list1.begin();p!=list1.end(); ++p)
cout<<*p<<" ";
}
int _tmain(int argc, _TCHAR* argv[])
{
list <int> list0;
list <int> list1(ar, ar+20);
list <int> list2(5,8);
list <char> list3(str,str+strlen(str));
list <int> list4(list1);
showVector("原list1 ",list1);
//测试添加和插入成员函数,vector不支持从前插入
list1.push_back(2);//从后面添加一个成员
showVector("push_back(2) ",list1);
//测试移出和删除
list1.pop_back();//将最后一个成员移出list1
showVector("pop_back() ",list1);
list1.insert(++list1.begin(),5);//在list1第一个的位置上插入成员5
showVector("insert(++list1.begin(),5) ",list1);
//测试引用类函数
cout<<endl<<"list1.front()="<<list1.front()<<endl;//list1第零个成员
cout<<"list1.back()="<<list1.back();//list1的最后一个成员
//cout<<"list1.at(4)="<<list1.at(4)<<endl;//list不支持随机访问
//cout<<"list1[4]="<<list1[4];//缺少下标预算符:operator[]
list1.sort();//排序
showVector("list1.sort() ",list1);
list1.erase(++list1.begin(),--list1.end());//删除成员
showVector("erase(++list1.begin(),--list1.end()) ",list1);
cout<<endl<<"list1.size(): "<<list1.size();//打印成员个数
list1.merge(list2);//合并两个排序列表
showVector("list1.merge(list2); ",list1);
cout<<endl<<"原list4:"<<endl;
for(list<int>::const_iterator p=list4.begin();p!=list4.end(); ++p)
cout<<*p<<" ";
list1.splice(list1.end(),list4,--list4.end());//将一个列表插入到另一个列表当中
showVector("list1.splice(list1.end(),list4,--list4.end()); ",list1);
list1.splice(list1.begin(),list4,list4.begin(),++list4.begin());
showVector("list1.splice(list1.begin(),list4,list4.begin(),++list4.begin()); ",list1);
list1.splice(list1.begin(),list4);
showVector("list1.splice(list1.begin(),list4); ",list1);
//测试赋值成员函数
list1.assign(8,1); // 重新给vec2赋值,8个成员的初始值都为1
showVector("assign(8,1) ",list1);
//显示序列的状态信息
cout<<endl<<"list1.size(): "<<list1.size()<<endl;//打印成员个数
cout<<"list1.empty(): "<<list1.empty();//是否为空
list1.erase(list1.begin(),list1.end());
showVector("erase(list1.begin(),list1.end()) ",list1);
cout<<endl<<"list1.size(): "<<list1.size()<<endl;//打印成员个数
cout<<"list1.empty(): "<<list1.empty();//是否为空
getchar();
return 0;
}
运行结果: