STL容器之list

list:

双链表,从任何地方快速插入与删除。

数据由若干个节点构成,每一个节点都包括一个信息块、一个前驱指针、一个后驱指针。

不使用连续的内存空间这样可以随意地进行动态操作。

可以在内部任何位置快速地插入或删除,当然也可以在两端进行push和pop。

不能进行内部的随机访问,不支持[]/vector.at()。


五个构造函数:

list<int> c0;//空链表

list<int> c1(3);  //建一个含三个默认值是0的元素的链表

list<int> c2(5,2);//建一个含五个元素的链表,值都是2

list<int> c4(c2);//建一个c2的copy链表

list<int> c5(c1.begin(),c1.end());//含c1一个区域的元素[first,last).  


方法:

assign() //分配值,有两个重载:   

c1.assign(++c2.begin(), c2.end())    

c1.assign(7,4) //c1中现在为7个4。   

back() //返回最后一元素的引用:   

begin() //返回第一个元素的指针(iterator)   

clear() //删除所有元素   

empty() //判断是否链表为空

end() //返回最后一个元素的下一位置的指针(list为空时end()=begin())  

erase() //删除一个元素或一个区域的元素(两个重载)  

    iterator erase( iterator loc );//删除loc处的元素
    iterator erase( iterator start, iterator end ); //删除start和end之间的元素
 

front() //返回第一个元素的引用:   

insert() //在指定位置插入一个或多个元素(三个重载):
    iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,

    void insert( iterator loc, size_type num, const TYPE &val );  //定位置loc前插入num个值为val的元素
    void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start, end)的所有元素

  

max_size() //返回链表最大可能长度(size_type就是int型):   

merge() //合并两个链表并使之默认升序(也可改):

    void merge( list &lst );//把自己和lst链表连接在一起

    void merge( list &lst, Comp compfunction ); //指定compfunction,则将指定函数作为比较的依据。  


pop_back() //删除链表尾的一个元素   

pop_front() //删除链表头的一元素   

push_back() //增加一元素到链表尾   

push_front() //增加一元素到链表头   

rbegin() //返回链表最后一元素的后向指针(reverse_iterator or const)  

rend() //返回链表第一元素的下一位置的后向指针   

remove //()删除链表中匹配值的元素(匹配元素全部删除)   

remove_if() //删除条件满足的元素(会遍历一遍链表)   

resize() //重新定义链表长度(两重载):   

reverse() //反转链表:   

size() //返回链表中元素个数   

sort() //对链表排序,默认升序(可自定义)

     void sort();//为链表排序,默认是升序
     void sort( Comp compfunction );//采用指定函数compfunction来判定两个元素的大小。   


splice() //对两个链表进行结合(三个重载)    

     void splice( iterator pos, list &lst );//把lst连接到pos的位置
     void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到现链表的pos上

     void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定范围。


swap() //交换两个链表(两个重载)   

unique() //删除相邻重复元素(断言已经排序,因为它不会删除不相邻的相同元素)

    void unique();//删除链表中所有重复的元素
    void unique( BinPred pr );// 指定pr,则使用pr来判定是否删除。


example:

#include <iostream>
#include <string>
#include <list>
#include <iterator>
#include <algorithm>

using namespace std;

void PrintIt(string& StringToPrint) 
{
	cout << StringToPrint << endl;
}

int main (void) 
{
	list<string> listTest;
	list<string>::iterator testIterator;

	listTest.push_back("Chocolate");
	listTest.push_back("Strawberry");
	listTest.push_front("Lime");
	listTest.push_front("Vanilla");
	listTest.push_front("The list Mezu");
	listTest.push_back("*** Thats the end ***");

	for (testIterator=listTest.begin();testIterator!=listTest.end();++testIterator)
		cout << *testIterator << endl;

	for_each (listTest.begin(), listTest.end(), PrintIt);
	listTest.reverse();
	for_each (listTest.begin(), listTest.end(), PrintIt);

	cout << "listTest.front() = " << listTest.front() << endl;
	cout << "listTest.size() = " << listTest.size() << endl;

	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值