容器之list

     相对于vector的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。

   常用函数

int size() const  返回容器元素个数

bool empty() const 判断容器是否为空,若返回true,表明容器已空

void pop_front() 删除容器首元素,当且仅当容器不为空

void pop_back() 删除容器尾元素,当且仅当容器不为空

void push_back(const T& x) list容器尾元素后增加一个元素x

void push_front(const T& x)  list容器首元素后增加一个元素x

void remove(const T& x) 删除容器中所有元素值等于x的元素

void clear() 删除容器中所有元素

iterator begin() 返回首元素的迭代器指针

iterator end() 返回尾元素后的迭代器指针,而不是尾元素的迭代器指针

reference front() 返回首元素的引用

reference back() 返回尾元素的引用

void sort() 容器内所有元素排序,默认是升序

void splice(iterator it ,list& x) 队列合并函数,队列x所有元素插入迭代指针it前,x变成空队列。 

             t1.splice(t1.begin(),t2)   表明把t2中所有元素整体地移动到原始链表t1的首元素前,t1增加了多少个元素,t2就减少了多少个元素。

                                                  splice完成的是拼接功能,也是数据移动操作,不是复制操作

merge  两个链表merge合并前,一般都已经按升序排好序,合并后的链表元素任然是升序序列。

           merge操作是数据移动操作,不是复制操作,因此t1.merge(t2) 表示把t2中所有元素依次移动并插入到源链表t1的适当位置,t1增加了多少个元素,t2就减少了多少个元素。

 

 

 

注:

(1) 对list首尾元素的增加和删除都是非常容易的

(2) list<string> test ;   此时,test.front()相当于string &s=test.front(),返回了首元素的应用;test.begin()相当于list<string>::iterator it=test.begin(),返回了首元素的迭代器指针。因此 test.front()与*test.begin()的结果是一致的。

 

posted @ 2014-03-27 10:26  zhoudan  阅读(105)  评论(0)    收藏  举报