zoukankan      html  css  js  c++  java
  • c++STL容器之list容器

    链表:将数据进行链式存储。物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的。

    STL中的链表是一个双向循环链表。

    一、构造函数

    list<T> lst;
    list(bag,end);
    list(n,elem);
    list(const list &list);

    二、list的赋值和交换

    assign(beg,end);
    assign(n,ele);
    list& operator=(const list &list);
    swap(list);
    #include<iostream>
    #include<list>
    #include<algorithm>
    using namespace std;
    //加入const限制只读,并使用const_iterator
    void printList(const list<int>&d) {
        for (list<int>::const_iterator it = d.begin(); it != d.end(); it++) {
            cout << *it <<" ";
        }
        cout << endl;
    }
    
    void test() {
        list<int> lst1;
        for (int i = 0; i < 10; i++) {
            lst1.push_back(i);
        }    
        list<int> lst2;
        list<int> lst3;
        lst3.assign(lst1.begin(), lst1.end());
        list<int> lst4;
        lst4.assign(3, 4);
        cout << "交换前:" << endl;
        printList(lst1);
        printList(lst4);
        cout << "交换后:" << endl;
        lst1.swap(lst4);
        printList(lst1);
        printList(lst4);
    
    }
    int main() {
        test();
        system("pause");
        return 0;
    }

    三、大小操作

    empty();
    size();
    resize(ele);
    resize(num,ele);

    四、插入和删除

    push_back(ele)//尾部插入元素
    pop_back()//尾部删除元素
    push_front(ele)//头部插入元素
    pop_front()//头部删除元素
    //注意pos、start、end参数是一个迭代器
    insert(pos,ele)//向指定的索引位置插入元素,返回新数据的位置
    insert(pos,n,ele)//向指定的索引位置插入n个元素,无返回值
    insert(pos,beg,end)//在pos位置插入区间为[beg,end]之间的元素,无返回值
    clear()//移除所有数据
    erase(pos)//删除指定索引的元素
    erase(start,end)//删除start到end之间的元素
    remove(ele);//删除指定的元素

    五、数据存取

    front();
    back();

    六、反转后排序

    #include<iostream>
    #include<list>
    #include<algorithm>
    using namespace std;
    //加入const限制只读,并使用const_iterator
    void printList(const list<int>&d) {
        for (list<int>::const_iterator it = d.begin(); it != d.end(); it++) {
            cout << *it <<" ";
        }
        cout << endl;
    }
    
    bool myCompare(int val1, int val2) {
        return val1 > val2;
    }
    
    void test() {
        list<int> lst1;
        lst1.push_back(4);
        lst1.push_back(2);
        lst1.push_back(1);
        lst1.push_back(3);
        //反转
        lst1.reverse();
        //所有不支持随机访问的迭代器的容量,是不支持sort排序
        //sort(lst1.begin(), lst1.end());不合法
        //内部会提供相应的算法
        lst1.sort();//默认从大至小
        printList(lst1);
        //要想降序排序,自己定义规则
        lst1.sort(myCompare);
        printList(lst1);
    }
    int main() {
        test();
        system("pause");
        return 0;
    }
  • 相关阅读:
    mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围
    centos6.5下安装samba服务器与配置
    centos 6.5 安装图形界面【转】
    Linux 下添加用户,修改权限
    Linux下自动调整时间和时区与Internet时间同步
    C#下利用封包、拆包原理解决Socket粘包、半包问题(新手篇)
    Unity脚步之NetworkBehaviour下前进、后退、左右转向的简单移动
    Token 在 Ajax 请求头中,服务端过滤器跨域问题
    【游戏】【暗黑2】重置属性点和技能点
    ASCII
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12111722.html
Copyright © 2011-2022 走看看