STL--list用法

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

常用函数

(1)    构造函数

list<Elem> c:创建一个空的list

list<Elem> c1(c2):复制另一个同类型元素的list

list<Elem>c(n):创建n个元素的list,每个元素值由默认构造函数确定

list<Elem>c(n,elem):创建n个元素的list,每个元素的值为elem

list<Elem>c(begin,end):由迭代器创建list,迭代区间为[begin,end)

(2)    大小、判断函数

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

bool empty() const:判断容器是否为空,若为空则返回true

(3)    增加、删除函数

void push_back(const T& x):list元素尾部增加一个元素x

void push_front(const T& x):list元素首元素钱添加一个元素X

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

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

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

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

iterator insert(iterator it, const T& x ):在迭代器指针it前插入元素x,返回x迭代器指针

void insert(iterator it,size_type n,const T& x):迭代器指针it前插入n个相同元素x

void insert(iterator it,const_iterator first,const_iteratorlast):把[first,last)间的元素插入迭代器指针it前

iterator erase(iterator it):删除迭代器指针it对应的元素

iterator erase(iterator first,iterator last):删除迭代器指针[first,last)间的元素

(4)    遍历函数

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

iterator end():返回尾元素之后位置的迭代器指针

reverse_iterator rbegin():返回尾元素的逆向迭代器指针,用于逆向遍历容器

reverse_iterator rend():返回首元素前一个位置的迭代器指针

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

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

(5)    操作函数

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

template<class Pred>void sort(Pred pr):容器内所有元素根据预断定函数pr排序

void swap(list& str):两list容器交换功能

void unique():容器内相邻元素若有重复的,则仅保留一个

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

void splice(iterator it,list& li,iterator first):队列li中移走[first,end)间元素插入迭代指针it前

void splice(iterator it,list& li,iterator first,iterator last):x中移走[first,last)间元素插入迭代器指针it前

void reverse():反转容器中元素顺序

 

 

实现结果

    

#include<iostream>
#include<vector>
#include<list>
#include <stdlib.h>
using namespace std;
int main(){
    //初始化
    list <int > list1;

    list <int> list3(10,2);//创建10个元素的list,其值都为2

    //插入函数与vector类似
    //尾部插入元素
    list1.push_back(1);
    list1.push_back(2);
    list1.push_back(3);
    list <int> list2(list1);
    //首部插入元素
    list1.push_front(4);
    cout<<"list1的元素是:";
    list<int>::iterator it=list1.begin();
    for(;it!=list1.end();it++)
        cout<<*it<<"  ";
    cout<<endl;
    cout<<"链表首部的元素(返回值是引用):"<<list1.front()<<endl;
    cout<<"链表首部的元素(返回值是迭代器指针):"<<*list1.begin()<<endl;
    cout<<"链表尾部的元素(返回值是迭代器指针):"<<*list1.rbegin()<<endl;

    //删除元素
    cout<<"list2的开始元素是:";
    list<int>::iterator it2=list2.begin();
    for(;it2!=list2.end();it2++)
        cout<<*it2<<"  ";
    cout<<endl;
    list2.pop_back();//删除尾部的元素
    list2.pop_front();//删除首部元素
    cout<<"list2的删除后元素是:";
    it2=list2.begin();
    for(;it2!=list2.end();it2++)
        cout<<*it2<<"  ";
    cout<<endl;
    list2.remove(2);//删除值为2的所有元素

    //insert函数和vector类似,就不演示了

    //排序函数
    list<int > list4;
    for(int i=0;i<10;i++)
        list4.push_back(rand()%100+i);
    cout<<"list4的排序前元素是:";
    list<int>::iterator it4=list4.begin();
    for(;it4!=list4.end();it4++)
        cout<<*it4<<"  ";
    cout<<endl;

    list4.sort();//升序排序
    it4=list4.begin();
    cout<<"list4排序后的元素是:";
     for(;it4!=list4.end();it4++)
        cout<<*it4<<"  ";
    cout<<endl;

    //自定义排序规则
    //队列合并函数,将list4合并到list1 的首部也就是迭代器参数前面
    list1.splice(list1.begin(),list4);
    cout<<"list1和list4合并后的元素是:";
    list<int>::iterator it5=list1.begin();
    for(;it5!=list1.end();it5++)
        cout<<*it5<<"  ";
    cout<<endl;
    
    //链表翻转
    list1.reverse();
    cout<<"list1翻转后的后的元素是:";
    it5=list1.begin();
    for(;it5!=list1.end();it5++)
        cout<<*it5<<"  ";
    cout<<endl;
}

 

posted @ 2016-08-17 15:05  Kobe10  阅读(1864)  评论(0编辑  收藏  举报