STL list

来源:互联网 发布:写文章的软件 编辑:程序博客网 时间:2024/06/16 03:28

list容器介绍

list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。对于任何位置的元素插入或删除,O(n)的复杂度,即查找到该元素

常用函数

typedef struct Node

{

…………………………

}Node

(1)    构造函数

list<Node> n:创建一个空的list

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

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

list<Node>c(n,Node_temp):创建n个元素的list,每个元素的值为某一个Node变量

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


(2)    大小、判断函数

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

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


(3)    增加、删除函数

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

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

void pop_back():删除容器尾元素,常常需要先!empty()

void pop_front():删除容器首元素


void clear():删除容器中的所有元素,此时n.empty==true&&n.size()==0。

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 <list>
#include <queue>
#include <vector>
using namespace std;


typedef struct Node
{
        int num;
        int _rank;
} Node;
typedef Node Elemtype;


int main()
{
        Node temp;
        temp.num = 1;
        temp._rank = 0;
        Node temp1;
        temp1.num = 11;
        temp1._rank = 10;
        list<Node> n;//temp为元素初始化值
        n.push_front(temp1);
        n.push_back(temp);


        //n.clear();
        /*if(!n.empty())
        {
                n.pop_back();
                n.pop_front();
        }*/
        for (list<Node>::iterator it = n.begin(); it != n.end(); it++)
                cout << it->num << endl << it->_rank << endl;
        for (list<Node>::reverse_iterator it = n.rbegin(); it != n.rend(); it++)
                cout << it->num << endl << it->_rank << endl;
        n.pop_front();
        for (list<Node>::reverse_iterator it = n.rbegin(); it != n.rend(); it++)
                cout << it->num << endl << it->_rank << endl;
        n.pop_back();
        for (list<Node>::reverse_iterator it = n.rbegin(); it != n.rend(); it++)
                cout << it->num << endl << it->_rank << endl;


}


原创粉丝点击