stl库之list

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;
}


运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值