C++ STL 之 list

浪子不回头ぞ 提交于 2020-11-21 11:48:45
#include <list>
#include <iostream>
using namespace std;

// 打印list元素
void PrintList(list<int>& L)
{
    for (list<int>::iterator it = L.begin(); it != L.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

// 初始化
// list<T> lstT;//list 采用采用模板类实现,对象的默认构造形式:
// list(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
// list(n, elem);//构造函数将 n 个 elem 拷贝给本身。
// list(const list &lst);//拷贝构造函数。
void test01()
{
    list<int> mlist1;
    list<int> mlist2(10, 10);
    list<int> mlist3(mlist2);
    list<int> mlist4(mlist2.begin(), mlist2.end());
    PrintList(mlist2);
    PrintList(mlist3);
    PrintList(mlist4);
    cout << "-------------------------------" << endl;
}

// list容器的插入和删除
// push_back(elem);//在容器尾部加入一个元素
// pop_back();//删除容器中最后一个元素
// push_front(elem);//在容器开头插入一个元素
// pop_front();//从容器开头移除第一个元素
// insert(pos, elem);//在 pos 位置插 elem 元素的拷贝,返回新数据的位置。
// insert(pos, n, elem);//在 pos 位置插入 n 个 elem 数据,无返回值。
// insert(pos, beg, end);//在 pos 位置插入[beg,end)区间的数据,无返回值。
// clear();//移除容器的所有数据
// erase(beg, end);//删除[beg,end)区间的数据,返回下一个数据的位置。
// erase(pos);//删除 pos 位置的数据,返回下一个数据的位置。
// remove(elem);//删除容器中所有与 elem 值匹配的元素
void test02()
{
    list<int> mlist;
    // 插入操作
    mlist.push_back(100);
    mlist.push_front(200);
    mlist.insert(mlist.begin(), 300);
    mlist.insert(mlist.end(), 400);
    mlist.insert(mlist.end(), 200);
    PrintList(mlist);
    list<int>::iterator it = mlist.begin();
    it++;
    it++;
    mlist.insert(it, 500);
    mlist.insert(mlist.end(), 200);
    PrintList(mlist);
    // 删除
    // mlist.pop_back();
    // mlist.pop_front();
    mlist.remove(200); // 删除匹配所有值
    PrintList(mlist);
    // mlist.erase(mlist.begin(), mlist.end());
    PrintList(mlist);
    cout << "-------------------------------" << endl;
}

// list大小操作
// size();//返回容器中元素的个数
// empty();//判断容器是否为空
// resize(num);//重新指定容器的长度为 num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
// resize(num, elem);//重新指定容器的长度为 num,若容器变长,则以 elem 值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

// 赋值操作
// assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
// assign(n, elem);//将 n 个 elem 拷贝赋值给本身。
// list& operator=(const list &lst);//重载等号操作符
// swap(lst);//将 lst 与本身的元素互换。
void test03()
{
    list<int> mlist;
    mlist.assign(10, 10);
    list<int> mlist2;
    mlist2 = mlist;
    PrintList(mlist);
    mlist2.push_back(11);
    PrintList(mlist2);
    cout << "------------------" << endl;
    mlist2.swap(mlist);
    PrintList(mlist);
    PrintList(mlist2);
    cout << "------------------" << endl;
}

// 排序 翻转
// reverse();//反转链表,比如 lst 包含 1,3,5 元素,运行此方法后,lst 就包含 5,3,1 元素。
// sort(); //list 排序
void test04()
{
    list<int> mlist;
    for (int i = 0; i < 10; i++)
    {
        mlist.push_back(i);
    }
    PrintList(mlist);
    // 容器元素反转
    mlist.reverse();
    PrintList(mlist);
    cout << "--------------------" << endl;
}

bool muCompare(int v1, int v2)
{
    return v1 > v2;
}

// 排序
void test05()
{
    list<int> mlist;
    mlist.push_back(2);
    mlist.push_back(1);
    mlist.push_back(7);
    mlist.push_back(5);
    PrintList(mlist);
    // 排序默认从小到大排序
    mlist.sort();
    PrintList(mlist);
    // 从大到小排序
    mlist.sort(muCompare);
    PrintList(mlist);
}

int main()
{
    test01();
    test02();
    test03();
    test04();
    test05();
    getchar();
    return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!