您当前的位置: 首页 >  容器

微凉秋意

暂无认证

  • 5浏览

    0关注

    110博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

<C++> list容器本质|常用接口|自定义排序规则

微凉秋意 发布时间:2022-10-11 12:27:26 ,浏览量:5

✅作者简介:热爱后端语言的大学生,CSDN内容合伙人 ✨精品专栏:C++面向对象 🔥系列专栏:C++泛型编程

文章目录
  • 1、list 容器本质与特点
  • 2、list 基本操作与常用接口
    • 2.1、list 构造函数
    • 2.2、list 赋值和交换
    • 2.3、list 大小操作
    • 2.4、 list 插入和删除
    • 2.5、list 数据存取
    • 2.6、list 反转和排序
  • 3、排序案例
    • 3.1、生肖类
    • 3.2、排序规则
    • 3.3、具体实现与效果

🔥前言

今天把 list容器的基本操作、常用接口做一个系统的整理,结合具体案例熟悉自定义内部排序方法的使用。listvector 是STL中最常用的两个容器,如果对vector 容器不熟悉的朋友可以在系列专栏里翻阅复习或者学习。

1、list 容器本质与特点

本质:

list 容器可以看做一个双向循环链表,用于存储的每个结点包含数据域和指针域

示意图: 在这里插入图片描述 名词解释:

  • beginend都是迭代器,可以看成指针来操作
    • begin 对应的是容器首个元素,而end 对应容器最后一个元素的下一个位置
  • prevnext代表前驱指针和后继指针,并不是 list容器的接口
    • 指针域用来存储下一个结点的地址
  • frontback分别是第一个和最后一个结点的数据域
  • push_backpush_frontpop_backpop_front代表尾插、头插、尾删、头删

通过前驱后继指针可以将每个结点连接起来,头结点的前驱与尾结点后继指针都指向null 由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器

list 特点:

  • 优点:可以对任意位置快速插入删除,动态分配存储,不会造成内存浪费和溢出
  • 缺点:遍历速度比数组慢,占用空间比数组大

list 有一个重要的性质,插入和删除操作都不会造成原有 list迭代器的失效

2、list 基本操作与常用接口

包含 list容器的构造、赋值交换、插入删除、数据存取、空间大小、反转、排序。

2.1、list 构造函数
  • 用于创建list容器

函数原型:

  • list lst;
    • 采用模板类实现,对象的默认构造形式
  • list(beg,end);
    • 构造函数将[beg, end)区间中的元素拷贝给本身。
  • list(n,elem);
    • 构造函数将n个elem拷贝给本身。
  • list(const list &lst);
    • 拷贝构造函数

示例:

#include
#include 
using namespace std;

void printList(const list& L) {

	for (list::const_iterator it = L.begin(); it != L.end(); it++) {
		cout             
关注
打赏
1664596500
查看更多评论
2.4565s