C++ list容器学习总结

本文详细介绍了链表数据结构的特点及优势,包括内存分配方式、插入删除操作的时间复杂度等,并通过实例展示了链表的基本操作如插入、删除、排序等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

----------------------------list

        链表是由一系列的结点组成,结点包含两个域,一个数据域,一个指针域

        链表内存是非连续的

        添加和删除元素 其时间复杂度都为常数项,不需要移动元素,比数组添加删除效率更高

        链表不是只有在需要的时候才分配内存

        链表需要额外的空间保存节点关系 前驱、后继关系

----------特性总结

        采用动态存储分配,不会造成内存浪费和溢出

        链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素

        链表灵活,但是空间和时间额外耗费较大

----------list常用API

list构造函数

         list<T> lstT;   list采用模板类实现,对象的默认构造形式

         list(beg,end);  构造函数将[beg,end)区间中的元素拷贝给本身

         list(n,elem);   构造函数将n给elem拷贝给本身

         list(const list& lst);  拷贝构造函数

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值匹配的元素

list大小操作

         size(); 返回容器中元素的个数

         empty();    判断容器是否为空

         reserve(num);   重新制定容器的长度为num,若容器变长的,则以默认值填充新位置

list赋值操作

         assign(beg,end);    将[beg,end)区间中的数据拷贝赋值给本身

         ssign(n,elem);  将n个elem拷贝赋值给本身

         list& operator= (const list& lst);  重载=操作符

         swap(lst);  将lst与本身的元素互换

list数据存取

         front();    返回第一个元素

         back(); 返回最后一个元素

list反转排列排序

         reverse();  反转链表,比如lst包含1,3,5元素,运行此方法后lst就包含5,3,1元素

         sort(); list排序


#include<iostream>
#include<list>
#include<algorithm>
using namespace std;

void test01 () {
    list<int> lst1;
    list<int> lst2(10,10);  //有参构造
    list<int> lst3(lst2);   //拷贝
    list<int> lst4(lst2.begin(),lst2.end());

    for (list<int>::iterator it = lst4.begin();it != lst4.end();it ++) {
        cout << *it << " ";
    }
    cout << endl;
}

void test02 () {
    list<int> lst;
    lst.push_back(100);
    lst.push_front(200);
    lst.push_front(200);
    lst.push_front(200);
    lst.push_back(300);
    lst.push_back(200);
    lst.push_back(200);
    lst.push_back(400);

    lst.insert(lst.begin(),500);
    lst.insert(lst.end(),600);

    list<int>::iterator it = lst.begin();
    it ++;it ++;
    lst.insert(it,700);

    // lst.pop_back();
    // lst.pop_front();

    // lst.erase(lst.begin(),lst.begin());

    lst.remove(200);   //删除匹配的所有值
    for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
        cout << *it << " ";
    }
    cout << endl;
}

//交换
void test03 () {
    list<int> lst1;
    lst1.assign(10,10);
    
    list<int> lst2;
    lst2 = lst1;
    
    lst2.swap(lst1);
}

//旋转
void test04 () {
    list<int> lst;
    for (int i = 0;i < 10;i ++) {
        lst.push_back(i);
    }
    for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
        cout << *it << " ";
    }
    cout << endl;

    lst.reverse();
    for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
        cout << *it << " ";
    }
    cout << endl;    
}

bool cmp (int t1,int t2) {
    return t1 > t2;
}

//排序
void test05 () {
    list<int> lst;
    lst.push_back(2);
    lst.push_back(211);
    lst.push_back(6);
    lst.push_back(3);
    lst.push_back(55);
    lst.push_back(1);

    //默认从小到大
    lst.sort();
    for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
        cout << *it << " ";
    }
    cout << endl;

    lst.sort(cmp);
    for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
        cout << *it << " ";
    }
    cout << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值