STL的list

  本篇文章之所以诞生,是由于在刷PAT时需要掌握STL模板库,所以特意测试学习了常用的方法。仅适用于G++环境下的单线程单文档情况。对于多文档多线程情况不保证正确性。如果你是只想在数据结构与算法比赛中多拿一些AC而学习STL,小码农自认它还是挺好的。如果是项目需要而学习STL,还是建议读官方文档。
  如果你觉得博文状态下阅读费劲,可以去我的github下载源码。如果出现对不齐的情况,把编辑器Tab键缩进设置成4个就可以了。欢迎指点评论。

#include <bits/stdc++.h>
using namespace std;
/*
    下面的注释: 
        1)DT : data type 
        2)遍历说明:以集合名开头的都是遍历本次测试使用到的集合的结果,
                    由于太多cout会使调理不清晰,便直接放上输出结果。 
*/
bool cmp(int e1, int e2){ return e1 > e2; } 
int main()
{
    /*
        1、创建:
            1)默认创建:                             list<DT> l; 
            2)拷贝创建:                             list<DT> l(ano);
            3)根据list的一部分创建:                 list<DT> l(iterator1, iterator2);
            4)创建时初始化size为n:                     list<DT> l(n);
                测试得到的初始值:                   int -> 0;           char -> 0(ASCII); 
                                                    double -> 0;        float -> 0; 
                                                    string -> "";       bool -> false;
            5)创建时初始化size为n,数据为m:            list<DT> l(n, m);
    */
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    list<int> l1;
    list<int> l3(&arr[3], &arr[8]);
    list<int> l2(l3);
    list<int> l4(10);
    list<int> l5(10, 8);
    /*Console:  l1: 
                l2: 4 5 6 7 8
                l3: 4 5 6 7 8
                l4: 0 0 0 0 0 0 0 0 0 0
                l5: 8 8 8 8 8 8 8 8 8 8                                             */

    /*
        2、插入:
            1)尾部插入:                         void push_back();
            2)头部插入:                             void push_front();
            3)插入迭代器指向的位置的后面:            iterator insert(iterator it, DT data);
    */
    l1.push_back(9);
    l1.push_front(1);
    l1.insert(l1.begin(), 0);
    /*Console:              l1:0 1 9                                */

    /*
        3、删除:
            1)尾部删除:                         void pop_back(); 
            2)头部删除:                         void pop_front();
            3)删除迭代器指向的位置:               iterator erase(iterator it);
            4)删除容器中所有元素等于x的元素:      void remove(DT data); 
            5)清空:                               void clear(); 
    */
    l2.pop_back();
    l2.pop_back();
    l2.erase(l2.begin());
    l2.push_back(5);
    l2.remove(5);
    /*Console:              l2:6                                */

    /*
        4、遍历:
            1)使用迭代器:                for(list<DT>::iterator it = l.begin(); it != l.end(); it++)
    */
    for(list<int>::iterator it = l1.begin(); it != l1.end(); it++)
        cout << *it << " ";
    cout << endl;

    /*
        5、获得元素
            1)获得头元素的拷贝:             DT front(); 
            2)获得尾元素的拷贝:             DT back();
            3)获得指向头元素之前的迭代器:    iterator begin(); 
            4)获得指向尾元素之后的迭代器:    iterator end(); 
    */
    int f5 = l1.front(), b5 = l1.back();
    cout << f5 << " " << b5 << endl;
    list<int>::iterator it51 = l1.begin();
    list<int>::iterator it52 = l1.end();
    it52--;
    cout << *it51 << " " << *it52 << endl;
    /*Console:                  0 9     
                                0 9                             */

    /*
        6、排序
            1)默认排序:                     void sort();
            2)自定义排序:                        void sort(cmp); 
    */
    l5.push_front(10);
    l5.sort();
    /*Console:                      l5:8 8 8 8 8 8 8 8 8 8 10                       */
    l5.sort(cmp);
    /*Console:                      l5:10 8 8 8 8 8 8 8 8 8 8                       */

    /*
        7、其他:
            1)反转:               void reverse(); 
            2)合并:               void merge(list<DT> &ano);
                    ano按顺序插在this集合之后,合并后被合并集合的被置空 
            3)交换:               void swap(list<DT> &ano);
    */
    l5.reverse();
    /*Console:                      l5:8 8 8 8 8 8 8 8 8 8 10                       */
    l3.merge(l5);
    /*Console:                      l5:4 5 6 7 8 8 8 8 8 8 8 8 8 8 8 10                 */

    /*
        8、其他:
            1)判断是否为空:       void empty(); 
            2)集合中元素个数       void size(); 
    */ 
    cout << l5.size() << " " << l5.empty() << endl; 
    /*Console:                      0 1                     */
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38206090/article/details/81345847
今日推荐