码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++学习 --list


    目录

    1, 什么是list

    2, 创建

    2-1, 标准数据类型

    2-2, 自定义数据类型

    2-3, 其他创建方式

    3, 操作list

    3-1, 赋值

    3-2, 添加元素

    3-2-1, 添加元素(assign)

    3-2-1-1, 标准数据类型

    3-2-1-2, 自定义数据类型

    3-2-2, 添加元素(insert)

    3-2-2-1, 标准数据类型

    3-2-2-2, 自定义数据类型

    3-2-3, 添加元素(push_back | push_front)

    3-2-3-1, 标准数据类型

    3-2-3-2, 自定义数据类型

    3-3, 查询

    3-3-1, 标准数据类型

    3-3-2, 自定义数据类型

    3-4, 获取长度(size)

    3-5, 设置长度(resize)

    3-6, 判断是否为空(empty)

    3-7, 删除元素

    3-7-1, 头删(pop_front)

    3-7-2, 尾删(pop_back)

    3-7-3, 指定元素删除(erase)

    3-8, 清空(clear)

    3-9, 排序(sort)

    3-10, 交换元素(swap)

    3-11, 翻转


    1, 什么是list

    C++中的一种容器类型, 也叫链表, 数据是链式存储的, 物理上不是一段连续的存储空间, 逻辑上通过链表指针来数据连接

    list由节点组成, 节点由存储数据的数据域和存储地址的指针域组成

    其迭代器不支持随机访问, 只能前移或后移

    因为不是标准数据类型, 需要包含头文件才能使用#include

    2, 创建

    通过list<数据类型> 对象名, 可创建list, 数据类型可以是标准数据类型, 也可以是自定义类型

    2-1, 标准数据类型

    1. //list中的元素类型为string
    2. list l1;

    2-2, 自定义数据类型

    1. Myclass m1("aaa", 1);
    2. //list容器中的数据类型为Myclass
    3. list l1;

    2-3, 其他创建方式

    1. //通过拷贝构造创建
    2. list l2(l1);
    3. //通过迭代器区间方式创建
    4. list l3(l1.begin(), l1.end());
    5. //list容器中的元素为5个m1
    6. list l4(5, m1);

    3, 操作list

    3-1, 赋值

     通过list<数据类型> 对象名2 = 对象名1, 进行赋值

    1. list l1;
    2. list l2 = l1;

    3-2, 添加元素

    3-2-1, 添加元素(assign)

    assign是用新的元素替换原来list的元素

    3-2-1-1, 标准数据类型
    1. //l1中分配5个字符串对象aaa
    2. l1.assign(5, "aaa");
    3. //l1中用3个字符串bbb, 替换上面的5个aaa
    4. l1.assign(3, "bbb");
    3-2-1-2, 自定义数据类型
    1. Myclass m1("aaa", 1);
    2. Myclass m2("bbb", 2);
    3. list l1;
    4. //l1中的元素为5个m1对象
    5. l1.assign(5, m1);
    6. //l1的元素被替换为5个m2对象替换
    7. l1.assign(5, m2);

    3-2-2, 添加元素(insert)

    insert是向list指定位置, 添加元素, 支持一次添加多个元素

    3-2-2-1, 标准数据类型
    1. //在l1.begin()迭代器指向位置, 插入元素aaa
    2. l1.insert(l1.begin(), "aaa");
    3. //在l1.begin()迭代器指向位置, 插入3个字符串bbb
    4. l1.insert(l1.begin(), 3, "bbb");
    5. //在l1.begin()迭代器指向位置, 插入区间:l1.begin(), l1.end()指向的元素
    6. l1.insert(l1.begin(), l1.begin(), l1.end());
    3-2-2-2, 自定义数据类型
    1. Myclass m1("aaa", 1);
    2. Myclass m2("bbb", 2);
    3. list l1;
    4. //在l1.begin()迭代器指向位置, 插入元素m1
    5. l1.insert(l1.begin(), m1);
    6. //在l1.begin()迭代器指向位置, 插入3个m2
    7. l1.insert(l1.begin(), 3, m2);
    8. //在l1.begin()迭代器指向位置, 插入区间:l1.begin(), l1.end()指向的元素
    9. l1.insert(l1.begin(), l1.begin(), l1.end());

    3-2-3, 添加元素(push_back | push_front)

    push_back是在尾部插入元素, push_front是在头部插入元素, 两者都只能单个添加

    3-2-3-1, 标准数据类型
    1. //在头部插入字符串元素bbb
    2. l1.push_front("bbb");
    3. //在尾部插入字符串元素aaa
    4. l1.push_back("aaa");
    3-2-3-2, 自定义数据类型
    1. Myclass m1("aaa", 1);
    2. Myclass m2("bbb", 2);
    3. list l1;
    4. //在头部插入元素m1
    5. l1.push_front(m1);
    6. //在尾部插入元素m1
    7. l1.push_back(m2);

    3-3, 查询

    由于list的数据不在连续内存空间上, 所以不支持索引访问

    通过对象名.front()获取首元素, 对象名.back(),  获取尾元素, 通过迭代器, 获取指定元素

    3-3-1, 标准数据类型

    1. //获取首元素
    2. cout << l1.front() << endl;
    3. //获取尾元素
    4. cout << l1.back() << endl;
    5. //通过迭代器获取元素
    6. list::iterator it = l1.begin();
    7. it++;
    8. it++;
    9. cout << *it << endl;

    3-3-2, 自定义数据类型

    1. Myclass m1("aaa", 1);
    2. Myclass m2("bbb", 2);
    3. list l1;
    4. //在头部插入字符串元素bbb
    5. l1.push_front(m1);
    6. //在尾部插入字符串元素aaa
    7. l1.push_back(m2);
    8. //获取首元素
    9. cout << l1.front().m_name << " " << l1.front().m_age << endl;
    10. //获取尾元素
    11. cout << l1.back().m_name << " " << l1.back().m_age << endl;
    12. //通过迭代器获取
    13. list::iterator it = l1.begin();
    14. it++;
    15. cout << it->m_name << " " << it->m_age << endl;

    3-4, 获取长度(size)

    通过对象名.size(), 获取list的长度

    cout << l1.size() << endl;

    3-5, 设置长度(resize)

    通过对象名.resize(), 设置list的长度

    1. //设置list的长度为5
    2. l1.resize(5);
    3. //设置list的长度为10, 多余为用m1填充
    4. l1.resize(10, m1);

    3-6, 判断是否为空(empty)

    通过对象名.empty(), 判断list是否为空, 为空返回1, 不为空返回0;

    cout << l1.empty() << endl;

    3-7, 删除元素

    3-7-1, 头删(pop_front)

    通过对象名.pop_front(), 删除list的头部元素

    1. //删除deque中的首元素
    2. l1.pop_front();

    3-7-2, 尾删(pop_back)

    通过对象名.pop_back(), 删除list的尾部元素

    1. //删除deque中的尾元素
    2. l1.pop_back();

    3-7-3, 指定元素删除(erase)

    通过对象名.erase(迭代器名称), 删除迭代器指向的元素

    1. //删除指定的元素
    2. l1.erase(d.begin());
    3. list::iterator it;
    4. it++;
    5. l1.erase(it);

    3-8, 清空(clear)

    通过对象名.clear(), 删除迭代器指向的元素

    1. //通过迭代器指定区间进行清空
    2. l1.erase(l1.begin(), l1.end());
    3. //清空元素
    4. l1.clear()

    3-9, 排序(sort)

    1. list l1;
    2. l1.push_back("ddd");
    3. l1.push_back("aaa");
    4. l1.push_back("ccc");
    5. l1.push_back("bbb");
    6. l1.sort();

    3-10, 交换元素(swap)

    通过对象名1.swap(对象名2), 可交换两个list中的元素, 元素类型需要一致

    l1.swap(l2);

    3-11, 翻转

    通过对象名.reverse(), 可翻转list中的元素

    l1.reverse();

  • 相关阅读:
    聊一聊异构系统间数据一致性
    OpenHarmony 4.0 源码编译hb 问题排查记录
    高数_第3章重积分_三重积分的奇偶性
    天猫订单之数据分析与挖掘——分类分析
    原来你不会找资源,三个宝藏白嫖书籍网站,阅读改变生活(一)
    list大坑请注意
    The timestamp difference between admin and executor exceeds the limit.解决办法
    LabVIEW开发指针式压力仪表图像识别
    【初始RabbitMQ】了解和安装RabbitMQ
    CRM客户管理系统源码 带移动端APP+H5+小程序
  • 原文地址:https://blog.csdn.net/qq_25500415/article/details/134541880
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号