C++STL之list容器

1.list的特点

2.list的方法

头文件:#include<list>

1.list 的特点     

1.1 vector 是拥有一段连续的内存,可以高效地随机访问,而 list 相当与数据结构的双向链表,所以他的内存是不连续的。所以 list 不能像 vector 那样进行随机存储访问,即不能用[ ],而是要用迭代器进行数据访问,但也因为 list 内存不连续的特点,使得他可以高效地进行任何地方的插入删除操作;


1.2实际操作时,如果你需要高效的随机存取,而不在乎插入和删除的效率,用 vector。

      如果你需要大量的插入与删除而不用随机存取访问,可以用 list。



2.list的方法:

2.1.list的构造

list<int>list1;   //构造空的列表 list1

lsit<int>list2(5);//构造5个成员,值都为0的列表list2

list<int>list3(5,1);//构造有5个1的列表 list3

list<int>list5=list4;//通过复制 list4 构造 list5



2.2.list的判断和清空

empty(); //判断是否为空列表

list<int>list1;
if(list1.empty())
{
    std::cout<<"empty"<<std::endl;
}

size();//返回列表的个数

list<int>list1;
int size = list1.size();


clear();//清空列表中的所有数据,size变为0

	list<int>list1(5,1);
	list1.clear();


2.3 列表迭代器操作

迭代器和指针很像。

用迭代器遍历列表:

int main()
{
	list<int>l1(5,1);		//构造5个1的列表 
	list<int>::iterator ti;		//构造一个列表迭代器ti 
	for(ti=l1.begin();ti!=l1.end();ti++)	 
	{
		cout<<*ti<<endl;	//打印迭代器 ti 指向的内容 
	}
	
	return 0;			
}
//ti = l1.begin()表示指l1列表的第一个元素
//l1.end() 返回列表 l1 的最后一个元素的位置再后一个位置 



2.4.list 的数据操作

2.4.1 push_back()和push_front():

push_back()是从 list 的末尾插入数据,而 push_front()是在 list 的头部插入数据

	list<int>list1;
	list1.push_front(1);    //在list1的头部插入数据 1 
	list1.push_back(9);		//在list1的末尾插入数据9 
	return 0;				//list1中的数据就是 1,9 


2.4.2 pop_back()和pop_front():

pop_back()是删除列表最末尾一个数据

pop_front()是删除列表最开头的一个数据

list<int>list1(10,1);
list1.pop_back();//删除list1的最后一个数据
list1.pop_front();//删除list1的最前的一个数据
使用pop_back()和pop_front()时必须对列表判空,如果列表为空调用pop_back()和pop_front()的话,会导致程序崩溃

2.3.3 front()和back():

front()返回列表的第一个数据。

back()返回列表最后一个数据。

	list<int>l1;
	l1.push_back(1);
	l1.push_back(9);
	cout<<l1.front()<<endl;
	cout<<l1.back()<<endl;


2.3.4 insert():插入数据

insert(list.begin(),1)   ;//在列表 list 的开头之前插入一个元素1,即1作为 list 的第一个元素。(把begin()换成其他迭代器位置也可以,下同)

insert(list.begin(), 2 , 1); //再列表 list 的开头之前插入 2 个1.

insert( list1.begin() , list2.begin() , list2.end() ) ; //在列表 list1 的开头插入 list2 的全部元素,即list2 在list1 前面

	list<int>list1;	//构造一个空列表 
	list1.insert(list1.begin(),8); 	//往空列表的起始位置插入一个数据8 


2.3.5 erase(); //删除列表一个数据或一个区域的数据

list.erase( list1.begin() ); //删除列表的开头元素,把begin()换成其他迭代器位置也可以

list.erase(list.begin(),list.end()); //删除列表开头到结尾的元素,即全部元素,删除后,列表的size为0

	list<int>list1;				//创建list1空列表 
	list<int>::iterator ti;		//创建迭代器 ti 
	list1.push_back(1); 
	list1.push_back(2); 
	list1.push_back(3); 		//往list1列表插入1,2,3 
	ti = list1.begin();			//迭代器 ti 指向列表的第一个元素 
	for(int i=0;i<2;i++,ti++)	//删除列表第二个元素 
		list1.erase(ti);


2.5列表链操作

2.5.1 1  list.assign( list2.begin() , list2.end() );//把列表 list2 的begin()指向的元素,会list2.end()的前一个元素复制到 列表list 中。即把list2复制给list,当然也可以换成其他迭代器

	list<int>list1;
	list<int>list2;			//创建空的列表 list1 和 list2 
	list1.push_back(1);		 
	list1.push_back(2);		//往列表 list1 中插入元素 1 和 2 
	list2.assign(list1.begin(),list1.end());	//把 list1 中的所有元素复制到list2中 
	cout<<list2.size()<<endl;

2.5.1.2  list.assign(n , val) ;      //把列表list 中改成 n 个val。

	list<int>list1(3,5);
	list1.assign(1,2);		//此时链表中只有1个 2  


2.5.2  list1.swap( list2 ) ;     //列表list1 与 list2 交换

	list<int>list1(5,1);
	list<int>list2(4,2);
	list1.swap(list2);


2.5.3   list1.reverse();

使列表 list1 倒置:

	list<int>list1;
	list1.push_back(1);
	list1.push_back(2);
	list1.push_back(3);		//往list1插入1,2,3 
	list1.reverse();		//列表倒置,变成3,2,1 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值