list容器

shienh 2020年02月07日 231次浏览

链表是一种物理存储单元上非连续,非顺序的存储结构。STL容器中的list容器是一个循环双向链表。list插入和删除操作都不会造成原有的list迭代器失效。
而vector的插入可能导致原有的迭代器全部失效。list的删除也只导致删除的那个元素的迭代器失效,而其他迭代器不受影响

#include <iostream>
#include <list>

using namespace std;

bool Compare(int value1,int value2){
    return value1>value2;
}

int main(int argc, char *argv[])
{
    list<int> l;
    l.push_back(2);
    l.push_back(3);
    l.push_back(4);
    //2 3 4
    for(list<int>::iterator it = l.begin();it!=l.end();it++){
        cout<<*it<<"    ";
    }
    cout<<endl;

    //逆序遍历 4 3 2
    for(list<int>::reverse_iterator rit = l.rbegin();rit!=l.rend();rit++){
        cout<<*rit<<"    ";
    }
    cout<<endl;

    //插入
    l.insert(l.begin(),1);
    // 1 2 3 4
    for(list<int>::iterator it = l.begin();it!=l.end();it++){
        cout<<*it<<"    ";
    }
    cout<<endl;

    //删除容器中所有值为4的节点
    l.remove(4);
    //1 2 3
    for(list<int>::iterator it = l.begin();it!=l.end();it++){
        cout<<*it<<"    ";
    }
    cout<<endl;

    //反转链表
    l.reverse();
    //3 2 1
    for(list<int>::iterator it = l.begin();it!=l.end();it++){
        cout<<*it<<"    ";
    }
    cout<<endl;

    //sort(l.begin(),l.end());
    //所有系统提供的标准算法,使用的容器的迭代器必须支持随机访问
    //不支持随机访问的迭代器容器,内部会提供对应的算法接口
    l.sort();//默认是从小到大的排序规则
    //1 2 3
    for(list<int>::iterator it = l.begin();it!=l.end();it++){
        cout<<*it<<"    ";
    }
    cout<<endl;


    l.sort(Compare);//从大到小 对于自定义数据需要自定义排序规则
    //3 2 1
    for(list<int>::iterator it = l.begin();it!=l.end();it++){
        cout<<*it<<"    ";
    }
    cout<<endl;

    return 0;
}