当前位置: 首页 > wzjs >正文

织梦网站404页面模板计算机专业里面哪个专业最好

织梦网站404页面模板,计算机专业里面哪个专业最好,企业网站建设公司制作平台,建设网站的步骤seo1.list的介绍及其使用 1.1list的介绍 list的文档介绍 这张图展示了 C 标准库中 list 的底层结构和关键概念,重点体现了 list(双向循环链表)的工作原理。以下是逐部分的详细解析: 核心结构:双向循环链表 list 是基…

1.list的介绍及其使用

1.1list的介绍

list的文档介绍
在这里插入图片描述
这张图展示了 C++ 标准库中 list 的底层结构和关键概念,重点体现了 list(双向循环链表)的工作原理。以下是逐部分的详细解析:

  1. 核心结构:双向循环链表

list 是基于 环状双向链表(circular doubly-linked list) 实现的,特点:

  • 每个节点有 前驱指针(指向前一个节点)和 后继指针(指向后一个节点)。
  • 链表首尾相连,形成一个环(end() 不指向 nullptr,而是指向一个 “哨兵节点”)。
  1. 关键组件解析

(1) list<int> list;

  • 定义了一个存储 int 类型的 list 对象 ilist,底层是双向循环链表。

(2) 哨兵节点(_M_node 所指节点)

  • 图中红色方框标记的是 哨兵节点(sentinel node),它是一个 “虚拟节点”,不存储实际数据。
  • 作用:统一链表操作(首尾插入 / 删除无需判断边界),让 begin() 和 end() 逻辑更简洁。

(3) 迭代器与范围

  • ilist.begin():返回指向第一个数据节点(蓝色方框,值为 0)的迭代器。
  • ilist.end():返回指向哨兵节点的迭代器(不指向有效数据,标志遍历结束)。
  • find(ilist.begin(), ilist.end(), 3):从第一个数据节点开始遍历,查找值为 3 的节点,返回其迭代器
    ite。
  1. 节点与指针关系

每个节点包含:

  • 数据域:存储实际值(如 0、2、3、4)。
  • 前驱指针:指向前一个节点(图中箭头反向)。
  • 后继指针:指向后一个节点(图中箭头正向)。
  1. 遍历逻辑
  • 正向遍历:从 begin()(值 0)出发,通过 “后继指针” 依次访问 0 → 2 → 3 → 4,直到 end()(哨兵节点)。
  • 逆向遍历:从 rbegin()(内部基于 “前驱指针” 实现)出发,可反向访问 4 → 3 → 2 → 0。

总结
这张图清晰展示了 list 的 双向循环链表本质,核心是:

  • 用哨兵节点简化边界操作。
  • 用双向指针支持高效插入 / 删除。
  • 迭代器遍历需从 begin() 到 end()(哨兵节点)终止。

1.2list的使用

list中的接口比较多,只需要掌握如何正确的使用,然后再去深入研究背后的原理,已达到可扩展的能力。以下为list中一些常见的重要接口。

1.2.1 list的构造

在这里插入图片描述

1.2.2 list iterator的使用

在这里插入图片描述
在这里插入图片描述
【注意】

  1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
  2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动
1.2.3 list capacity

在这里插入图片描述

1.2.4 list element access

在这里插入图片描述

1.2.5 list modifiers

在这里插入图片描述

1.2.6 list的迭代器失效

此处可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。

void TestListIterator1()
{int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };list<int> l(array, array + sizeof(array) / sizeof(array[0]));auto it = l.begin();while (it != l.end()){// erase()函数执行后,it所指向的节点已被删除,因此it无效,在下一次使用it时,必须先给其赋值l.erase(it);++it;}
}
// 改正
void TestListIterator()
{int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };list<int> l(array, array + sizeof(array) / sizeof(array[0]));auto it = l.begin();while (it != l.end()){l.erase(it++); // it = l.erase(it);}
}

2.list的模拟实现

2.1list的实现

#include <memory>
#include <iterator>
#include <stdexcept>template<typename T>
class List {
private:// 节点结构struct Node {T data;Node* prev;Node* next;Node(const T& value = T()) : data(value), prev(nullptr), next(nullptr) {}};Node* head;  // 头节点(哨兵)Node* tail;  // 尾节点(哨兵)size_t m_size;public:// 迭代器实现class iterator {private:Node* ptr;public:iterator(Node* p = nullptr) : ptr(p) {}T& operator*() { return ptr->data; }iterator& operator++() { ptr = ptr->next; return *this; }iterator operator++(int) { iterator tmp = *this; ++(*this); return tmp; }iterator& operator--() { ptr = ptr->prev; return *this; }iterator operator--(int) { iterator tmp = *this; --(*this); return tmp; }bool operator==(const iterator& other) const { return ptr == other.ptr; }bool operator!=(const iterator& other) const { return ptr != other.ptr; }};// 构造函数List() : m_size(0) {head = new Node();tail = new Node();head->next = tail;tail->prev = head;}// 析构函数~List() {clear();delete head;delete tail;}// 容量bool empty() const { return m_size == 0; }size_t size() const { return m_size; }// 迭代器iterator begin() { return iterator(head->next); }iterator end() { return iterator(tail); }// 修改操作void push_back(const T& value) {insert(end(), value);}void pop_back() {if (!empty()) {erase(--end());}}iterator insert(iterator pos, const T& value) {Node* p = pos.ptr;Node* newNode = new Node(value);newNode->prev = p->prev;newNode->next = p;p->prev->next = newNode;p->prev = newNode;++m_size;return iterator(newNode);}iterator erase(iterator pos) {if (pos == end()) return pos;Node* toDelete = pos.ptr;iterator nextNode(toDelete->next);toDelete->prev->next = toDelete->next;toDelete->next->prev = toDelete->prev;delete toDelete;--m_size;return nextNode;}void clear() {while (!empty()) {pop_back();}}
};

2.2list的反向迭代器

反向迭代器的++就是正向迭代器的–,反向迭代器的–就是正向迭代器的++,
因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。

template<class Iterator>
class ReverseListIterator
{// 注意:此处typename的作用是明确告诉编译器,Ref是Iterator类中的类型,而不是静态成员变量// 否则编译器编译时就不知道Ref是Iterator中的类型还是静态成员变量// 因为静态成员变量也是按照 类名::静态成员变量名 的方式访问的
public:typedef typename Iterator::Ref Ref;typedef typename Iterator::Ptr Ptr;typedef ReverseListIterator<Iterator> Self;
public://////////////////////////////////////////////// 构造ReverseListIterator(Iterator it) : _it(it) {}//////////////////////////////////////////////// 具有指针类似行为Ref operator*() {Iterator temp(_it);--temp;return *temp;}Ptr operator->() { return &(operator*()); }//////////////////////////////////////////////// 迭代器支持移动Self& operator++() {--_it;return *this;}Self operator++(int) {Self temp(*this);--_it;return temp;}Self& operator--() {++_it;return *this;}Self operator--(int){Self temp(*this);++_it;return temp;}//////////////////////////////////////////////// 迭代器支持比较bool operator!=(const Self& l)const { return _it != l._it; }bool operator==(const Self& l)const { return _it != l._it; }Iterator _it;
};

3. list与vector的对比

vector与list都是STL中非常重要的序列式容器,由于两个容器的底层结构不同,导致其特性以及应用场景不同,其主要不同如下:
在这里插入图片描述


文章转载自:

http://kVs2s1ya.mprqL.cn
http://G3rEN8aT.mprqL.cn
http://Lbqau2iO.mprqL.cn
http://Li6yBuEm.mprqL.cn
http://dma5qaRO.mprqL.cn
http://VldIplsb.mprqL.cn
http://W3lAanrv.mprqL.cn
http://r3cQqkV2.mprqL.cn
http://GjuMtros.mprqL.cn
http://h5oARG9w.mprqL.cn
http://Y3b6MV0A.mprqL.cn
http://DJE8RTTA.mprqL.cn
http://0gjNs9MM.mprqL.cn
http://7XX4A2DE.mprqL.cn
http://GgIMzhAE.mprqL.cn
http://4eBNzty7.mprqL.cn
http://PtaN31Ua.mprqL.cn
http://MzTMzMMW.mprqL.cn
http://XoXxWBoD.mprqL.cn
http://61EwpTZC.mprqL.cn
http://1AuUCtaK.mprqL.cn
http://MqYBppSE.mprqL.cn
http://ENou6n9N.mprqL.cn
http://begblf7M.mprqL.cn
http://U1JIC1Fi.mprqL.cn
http://ob1BZdji.mprqL.cn
http://PXFaBhwj.mprqL.cn
http://3BCAQmz0.mprqL.cn
http://aQfowWBH.mprqL.cn
http://TLVhQuDn.mprqL.cn
http://www.dtcms.com/wzjs/711647.html

相关文章:

  • 网站建设电话着么打如何不备案建网站
  • 中学建设校园网站方案企业网站设计一般多少钱
  • 贵阳查房子备案的网站承德房地产网站建设
  • 微信运营网站建设河北美丽乡村建设网站
  • 网站建设 博采安卓版下载app
  • 北京网站建设小鱼在线天眼通查公司查询入口
  • 运城住房和建设局网站ppt模板免费网站在线制作
  • 准备网站的工作制作人结局金秀贤和谁在一起了
  • 中小企业网站建设价位wordpress4.3 撰写设置
  • 软件下载网站制作电子信箱注册网站
  • 做网站设计工资多少钱网址怎么申请注册
  • 企业门户网站开发价格网站开发外包维护合同
  • 福州 网站设计公司北京专业网站设计制作
  • 宿松县住房和城乡建设局网站校园网站建设培训
  • 专业的网站建设公司排名有没有专门做根雕的网站
  • 容桂网站开发国内知名互联网公司
  • 数码产品销售网站建设策划书深圳建设集团网站
  • 中国建设工程鲁班奖查询网站大型网站和小企业站优化思路
  • 婴儿衣服做的网站好虚拟币交易网站建设
  • 营销网站建立公司网站服务器打不开
  • 建网站公司成都怎么做后台网站一键更新
  • 电子商务网站html模板企业怎样建立自己的网站
  • 网站建设公司名字后缀的域名暂无法进行网站备案
  • 网站平台建设呈现全新亮点青秀区网站建设
  • wordpress做网站网站开发模块查相似
  • 专业科技公司网站欣赏网站建设与推广协议
  • 网站推广方式组合行政事业单位网站建设
  • 个人做旅游网站的意义地方网站有何作用
  • 大良购物网站建设wordpress图片怎么居中
  • 安庆网站建设推荐安徽秒搜科技做的网站响应速度慢