zoukankan      html  css  js  c++  java
  • C++中list的用法总结

    list简介

    list 也是顺序容器的一种。只是list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素,如下图所示。

    当然,list的用法和vector很类似,也拥有顺序容器中的常用方法,需要注意的是**list不支持使用下标随机存取元素。
    在 list 容器中,在已经定位到要增删元素的位置的情况下,增删元素能在常数时间内完成。如下图所示,在 ai 和 ai+1 之间插入一个元素,只需要修改 ai 和 ai+1 中的指针即可:

    list的成员函数

    void push_front(const T & val)                                  将 val 插入链表最前面
    
    void pop_front()                                                        删除链表最前面的元素
    
    void sort()                                                                 将链表从小到大排序
    
    void remove (const T & val)                                     删除和 val 相等的元素
    
    
    remove_if                                                                 删除符合某种条件的元素
    
    void unique()                                                            删除所有和前一个元素相等的元素
    
    void merge(list <T> & x)                                           将链表 x 合并进来并清空 x。要求链表自身和 x 都是有序的
    
    
    void splice(iterator i, list <T> & x, iterator first, iterator last)            在位置 i 前面插入链表 x 中的区间 [first, last),并在链表 x 中删除该区间。链表自身和链表 x 可以是同一个链表,只要 i 不在 [first, last) 中即可
    

    list的用法实例

    #include <iostream>
    #include <list>
    
    using namespace std;
    
    
    int main(){
    
    int a[6] = {1,3 ,2, 5,2,3};
    int b[5] = {1,3,2,4,6};
    
    list<int> L(a,a+6);
    list<int> Lb(b,b+5);
    list<int>::iterator pl;
    
    
    cout<< "element in L : " ;
    for(pl = L.begin(); pl != L.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    
    cout<< "element in Lb : " ;
    for(pl = Lb.begin(); pl != Lb.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    
    L.sort();
    cout<< "1) sort L: " ;
    
    for(pl = L.begin(); pl != L.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    
    cout <<"2) after delete element 2: ";
    L.remove(2);
    for(pl = L.begin(); pl != L.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    
    
    cout << "3) delete first element in Lb: ";
    Lb.pop_front();
    for(pl = Lb.begin(); pl != Lb.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    
    cout << "4) delete all same element in L: ";
    L.unique();
    for(pl = L.begin(); pl != L.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    
    //使用merge
    Lb.sort();
    L.merge(Lb);
    cout << "5) merge L with Lb: ";
    L.unique();
    for(pl = L.begin(); pl != L.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    cout << "   size of Lb: " << Lb.size()<<endl;
    
    L.reverse();
    cout << "6) reverse L ";
     for(pl = L.begin(); pl != L.end();++pl){
        cout << *pl << " " ;
    }
    cout << endl;
    
    return 0;
    }
    

    输出结果如下:

  • 相关阅读:
    Spring-IOC容器
    VUE 过滤器
    axios.post参数问题
    Stylus| vue项目中stylus和stylus-loader版本兼容问题
    SPA
    Options API 和 Composition API 的对比
    【ES6学习笔记之】Object.assign()
    vue element-ui 常用组件
    Vue调试工具
    组件
  • 原文地址:https://www.cnblogs.com/zuixime0515/p/10508079.html
Copyright © 2011-2022 走看看