list操作指南

复制代码
#include <iostream>
using namespace std;
#include <list>
#include <algorithm>

void printList(const list<int>& L)
{
    for (auto it = L.begin(); it != L.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

//一、构造函数
/*
list<T> lst;                         采用模板类实现,默认无参构造函数
list(lst.begin(), lst.end());        将lst[begin(), end())区间中的元素拷贝给本身
list(n, elem);                       构造函数将n个elem拷贝给本身
list(const list & lst);              拷贝构造函数
*/
void ltest01()
{
    list<int> L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);

    printList(L1);

    list<int> L2(L1.begin(), L1.end());
    printList(L2);

    list<int> L3(L2);
    printList(L3);

    list<int> L4(10, 1000);
    printList(L4);
}

//二、赋值和交换
/*
给list容器进行赋值,以及交换list容器
assign(beg, end);                     将[beg, end)区间中的数据拷贝赋值给本身
assign(n, elem);                      将n个elem拷贝赋值给本身
list & operator=(const list & lst);   重载等号操作符
swap(lst);                            将lst与本身的元素互换
*/
void ltest02()
{
    list<int> L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);
    printList(L1);

    list<int> L2;
    L2 = L1;
    printList(L2);

    list<int> L3;
    L3.assign(L2.begin(), L2.end());
    printList(L3);

    list<int> L4;
    L4.assign(10, 100);
    printList(L4);

    //采用L1和L4做交换
    cout << "交换前:" << endl;
    printList(L1);
    printList(L4);
    L1.swap(L4);
    cout << "交换后:" << endl;
    printList(L1);
    printList(L4);
}

//三、大小操作
/*
empty();                                   判断容器是否为空
size();                                    返回容器中元素的个数
resize(int num);                           重新指定容器的长度为num,若容器变长,则以默认值填充新位置
                                           若容器变短,则末尾超出容器长度的元素被删除
resize(int num, elem);                     重新指定容器的长度为num,若容器变长,则以elem值填充新位置
                                           若容器变短,则末尾超出容器长度的元素被删除
*/
void ltest03()
{
    list<int> L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);
    printList(L1);

    if (L1.empty())
    {
        cout << "" << endl;
    }

    int size = L1.size();
    cout << "大小:" << size << endl;

    L1.resize(15);
    printList(L1);

    L1.resize(20, 20);
    printList(L1);
}

//四、插入和删除
/*
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 ltest04()
{
    list<int> L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_front(100);
    L1.push_front(200);
    L1.push_front(300);
    printList(L1);

    //尾删
    L1.pop_back();
    printList(L1);

    //头删
    L1.pop_front();
    printList(L1);

    //插入
    list<int>::iterator it = L1.begin();
    L1.insert(++it, 1000);
    printList(L1);

    L1.insert(L1.begin(), 2, 2000);
    printList(L1);

    list<int> L2;
    L2.push_back(10);
    L2.push_back(20);
    L2.push_back(30);

    L1.insert(L1.begin(), L2.begin(), L2.end());
    printList(L1);

    //删除
    it = L1.begin();
    L1.erase(++it);
    printList(L1);

    //移除
    L1.push_back(10000);
    printList(L1);
    L1.remove(10000);
    printList(L1);
}


//五、数据存取
/*
对list容器中数据进行存取
front();                              返回第一个元素
back();                               返回最后一个元素
*/
void ltest05()
{
    list<int> L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_front(100);
    L1.push_front(200);
    L1.push_front(300);
    printList(L1);
    int front = L1.front();
    int back = L1.back();
    cout << front << back << endl;
    list<int>::iterator it = L1.begin();
    it++;
    it--;//支持双向
    cout << *it << endl;
}

//六、反转和排序
/*
将容器中的元素反转,以及将容器中的数据进行排序
reverse();              反转链表
sort();                 链表排序
*/
bool myCompare(int a, int b)
{
    //降序排序
    return a > b;
}

void ltest06()
{
    list<int> L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_front(100);
    L1.push_front(200);
    L1.push_front(300);
    printList(L1);
    
    L1.reverse();
    printList(L1);

    L1.sort();//默认从小到大升序排序
    printList(L1);

    L1.sort(myCompare);//降序排列
    printList(L1);
}

int main_list()
{
    ltest06();
    return 0;
}
复制代码

 

 

posted @   花与不易  阅读(56)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示