本文是对之前list类的模拟实现的重制。

文章目录

    • 整体框架
    • Alloc内存池
    • iterator类
      • iterator的意义
      • iterator的实现
        • operator=&&拷贝析构
        • iterator的三个模板参数
        • operator->的编译器省略
    • List的拷贝构造析构等
    • list接口的基本实现
    • string,vector,list的迭代器

整体框架

namespace YCB
{//模拟实现list当中的结点类template<class T>struct _list_node{_list_node(const T& val = T()); T _val;                _list_node<T>* _next;   _list_node<T>* _prev;  };//list迭代器template<class T, class Ref, class Ptr>struct _list_iterator{typedef _list_node<T> node;typedef _list_iterator<T, Ref, Ptr> self;_list_iterator(node* pnode);  //各种运算符重载函数self operator++();self operator--();self operator++(int);self operator--(int);bool operator==(const self& s) const;bool operator!=(const self& s) const;Ref operator*();Ptr operator->();//成员变量node* _pnode; //一个指向结点的指针};//模拟实现listtemplate<class T>class list{public:typedef _list_node<T> node;typedef _list_iterator<T, T&, T*> iterator;typedef _list_iterator<T, const T&, const T*> const_iterator;//默认成员函数list();list(const list<T>& lt);list<T>& operator=(const list<T>& lt);~list();//迭代器相关函数iterator begin();iterator end();const_iterator begin() const;const_iterator end() const;//访问容器相关函数T& front();T& back();const T& front() const;const T& back() const;//插入、删除函数void insert(iterator pos, const T& x);iterator erase(iterator pos);void push_back(const T& x);void pop_back();void push_front(const T& x);void pop_front();//其他函数size_t size() const;void resize(size_t n, const T& val = T());void clear();bool empty() const;void swap(list<T>& lt);private:node* _head; //指向链表头结点的指针};
}

Alloc内存池

以后详细谈

template <class T, class Alloc = alloc>class list {typedef __list_node<T> list_node;typedef list_node* link_type;}
void empty_initialize() { node = get_node();node->next = node;node->prev = node;
}link_type get_node() { return list_node_allocator::allocate(); }
//内存池来的,用定位new显式调用构造函数和析构函数
link_type create_node(const T& x) {link_type p = get_node();__STL_TRY {construct(&p->data, x);}__STL_UNWIND(put_node(p));return p;
}

iterator类

iterator的意义

为什么需要iterator?

前面在模拟string和vector并没有一定要求一个迭代器。

string和vector对象都将其数据存储在了一块连续的内存空间,我们通过指针进行自增、自减以及解引用等操作,就可以对相应位置的数据进行一系列操作,因此string和vector当中的迭代器就是原生指针。

但是list不行。

因此链表不连续,下一个位置不是要的数据位置,所以不能直接++,而像原生指针一样只有直接++就不行。

即结点的指针原生行为不满足迭代器定义,那么使用迭代器通过类去封装结点的指针重载运算符来控制,使得可以像使用string和vector当中的迭代器一样的方式使用list当中的迭代器。

比如我们进行想++实际背后进行的是next操作。

比如遍历链表头到尾,iterator的begin()end()实际封装的是下图中的样子。

void test_list1()
{list<int>lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);list<int>::iterator it=lt.begin();//调用默认的浅拷贝while(it!=lt.end()){cout<<*it<<" ";it++;}cout<<endl;for(auto e:lt){//按照stl的标准把begin()和end()替换了cout<<e<<" ";}cout<<endl;
}  
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tvpuF2ix-1643207276408)(list类的模拟实现.assets/image-20211001153207318.png)]

iterator的实现

operator=&&拷贝析构

iterator拷贝和析构以及operator=怎么处理?

  • 采用浅拷贝
    • 只要让迭代器能访问实际的空间即可。
  • 析构不写
    • 链表的结点归链表管,不然迭代器每次出来结束就给删除了
void test_list1()
{list<int>lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);list<int>::iterator it=lt.begin();//调用默认的浅拷贝
}

iterator的三个模板参数

既然如此可以按照定义自己实现迭代器。

但是对于如下一个场景:

void PrintList(const List<int>& lt){list<int>::iterator it =lt.begin();//没有const begin()//能提供iterator begin() const 来处理吗?while(it!=lt.end()){*it+=1;cout<<*it<<" "; ///上面这种方式发现可以const可以修改了!!++it;}cout<<endl;
}
void test_list5()
{list<int>lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);PrintList(lt1);
}

考虑一个问题:const对象的迭代器访问和普通对象的迭代器访问如何实现

 template<class T>
struct _list_iterator{T& operator*(){return _pnode->val;  }//控制读写const T& operator*(){return _pnode->val;  }
};
template<class T>class list{typedef _list_node<T> node;public:typedef _list_iterator<T> iterator;///只能读不能写。如何_list_iterator中如何控制读写typedef _list_iterator<T> const_iterator;///但是此时并不是说const_iterator不是本身是一个const迭代器,};

上述代码并不能实现const iterator的实际效果。

  • 如何控制const _list_iterator 的只能读写。
    • 首先const T& operator*() 返回
    • 而且当前情况下的const_iterator并不能调到_list_iteratorconst T& operator*。因为const T& operator*T& operator并不能构成重载关系。
    • 其次const List<int> & ltlt是const的。这里的iterator it本身不是const,是类型名称带了一个const。

一种方式是定义一个新的类型(struct)_list_const_iterator const_iterator。在新的类里面将函数的operator操作以const形式返回。

这种方式虽然可以但是普通迭代器和const迭代器有大量冗余,并不是好的复用。

以下代码为上述代码的相对完整版。

namespace YCB{template<class T>struct _list_node{_list_node(const T& val = T() )///这里的默认值这样处理也可以,或者下面传入的时候传一个默认的构造:_val(val),_prev(nullptr),_next(nullptr){ }T _val;_list_node<T>* _next;_list_node<T>* _prev;};template<class T>struct _list_iterator{typedef _list_node<T> node;typedef _list_iterator<T> self;node* _pnode;///封装的结点的指针_list_iterator(node* pnode):_pnode(pnode){}T& operator*(){return _pnode->val;  }//可读写T& operator*(){return _pnode->val;  }bool operator!=(const self& s) const{return _pnode !=s._pnode;}Ptr operator->(){return &_pnode->val;}//++it ->it.operator++(&it)self& operator++(){_pnode = _pnode->_next;return *this;}self& operator--(){_pnode = _pnode->_prev;return *this;}// it++ -> it.operator(&it,0)self operator++(int){self tmp(*this);_pnode=_pnode->_next;return tmp;}self operator--(int){self tmp(*this);_pnode=_pnode->_prev;return tmp;}template<class T>struct const_list_iterator{typedef _list_node<T> node;typedef _list_iterator<T> self;node* _pnode;///封装的结点的指针_list_iterator(node* pnode):_pnode(pnode){}//控制读写const T& operator*(){return _pnode->val;  }bool operator!=(const self& s) const{return _pnode !=s._pnode;}const Ptr operator->() {return &_pnode->val;}//++it ->it.operator++(&it)const self& operator++(){_pnode = _pnode->_next;return *this;}const self& operator--(){_pnode = _pnode->_prev;return *this;}// it++ -> it.operator(&it,0)self operator++(int){self tmp(*this);_pnode=_pnode->_next;return tmp;}self operator--(int){self tmp(*this);_pnode=_pnode->_prev;return tmp;}template<class T>class list{typedef _list_node<T> node;public:typedef _list_iterator<T> iterator;///只能读不能写。如何_list_iterator中如何控制读写typedef _list_iterator<T> const_iterator;///但是此时并不是说const_iterator不是本身是一个const迭代器,iterator begin(){return  (iterator)_head->next;}iterator end(){return (iterator)_head;}const_iterator begin() const{return (const_iterator)_head->next;}const_iterator end() const{return (const_iterator)_head;}list(){_head = new node(T());//也可以这样处理_head->_next=_head;_head->_prev=_head;}iterator erase(iterator pos){assert(pos->_pnode);assert(pos->_pnode->next!=pos->_node);node* prev=pos->_pnode->prev;node* next=pos->_pnode->next;delete pos->_pnode;prev->next=next;next->prev=prev; return iterator(next);//返回下一个位置的迭代器}private:node* _head;}
}

此时我们可以去参考库的实现,可以发现库里面实现的类里面是三个模板参数,原因何在?

源码采用通过多用两个模板参数把要重写一个const iterator类省去了。

当我们调用的const_iterator的时候就可以把对应operator*operator->的返回值控制成const版本了。

所以最后的做法:

template<class T,class Ref,class Ptr>
struct _list_iterator{public:typedef _list_node<T> node;typedef _list_iterator<T,Ref,Ptr> self;node* _pnode;///封装的结点的指针_list_iterator(node* pnode):_pnode(pnode){}Ref operator*(){return _pnode->val;}Ptr operator->(){return &_pnode->_val;}
}
template<class T,class Ref,class Ptr>
class list{typedef _list_iterator<T,T&,T*> iterator;typedef _list_iterator<T,const T&,const T*> const_iterator;iterator begin(){return  (iterator)_head->next;}iterator end(){return (iterator)_head;}const_iterator begin() const{return (const_iterator)_head->next;}const_iterator end() const{return (const_iterator)_head;}
}

operator->的编译器省略

class Date{public:int _year=0;int _month=0;int _day=1;
}
void test_list2(){list<Date> lt;lt.push_back(Date());lt.push_back(Date());lt.push_back(Date());list<Date>::iterator it=lt.begin();while(it!=lt.end()){cout<<(*it)._year<<" "<<(*it)._month<<" "<<(*it)._day<<endl;cout<<it->_year<<" "<<it->_month<<" "<<it->_day<<endl; it++;}cout<<endl; 
}

对于->运算符的重载,我们直接返回结点当中所存储数据的地址即可。

Ptr operator->(){return &_pnode->_val;
}

但是我们看到返回值是一个地址。

那么使用it->_year 实际上是 it.operator->(_year) [返回值是Date* /T *] ,返回值是一个指针。

对于指针变量来说严格来说还有一个箭头才能输出Date类里的成员_year。

it->->_year

但是两个箭头,程序的可读性很差,所以编译器做了特殊识别处理,为了可读性,省略了一个箭头

所以调用都是一个->即可。

List的拷贝构造析构等

        list(){_head = new node(T());//也可以这样处理_head->_next=_head;_head->_prev=_head;}///法一就是for循环operator=赋值list(const list<T>& lt){_head=new node;_head->_next=_head;_head->_prev=_head;for(const auto&e : lt){///这里是调用了operator=给epush_back(e);}}//传统版本list<T>& operator=(const list<T>& lt){if(this!=&lt){clear();//留下哨兵位for(const auto&e :lt){push_back(e);}}return *this;}		//现代版本list<T>& operator=(list<T> lt){swap(_head,lt._head);return *this;}~list(){clear();delete _head;_head=nullptr;}void clear(){iterator it=begin();while(it!=end()){it=erase(it);///注意不能++,erase会返回下一个位置//erase(it++);}}

测试场景:

void test_vector3(){list<int>lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);while(lt!=end()){cout<<*lt<<" ";}cout<<endl;list<int>lt2(lt);//默认生成的浅拷贝while(lt2!=end()){cout<<*lt2<<" ";}cout<<endl;list<int>lt3;lt3.push_back(10);lt3.push_back(20);lt2=lt3;while(lt2!=end()){cout<<*lt2<<" ";}cout<<endl;while(lt3!=end()){cout<<*lt3<<" ";}cout<<endl;
}

list接口的基本实现

namespace YCB{template<class T>struct _list_node{_list_node(const T& val = T() )///这里的默认值这样处理也可以,或者下面传入的时候传一个默认的构造:_val(val),_prev(nullptr),_next(nullptr){ }T _val;_list_node<T>* _next;_list_node<T>* _prev;};template<class T,class Ref,class Ptr>struct _list_iterator{typedef _list_node<T> node;typedef _list_iterator<T,Ref,Ptr> self;node* _pnode;///封装的结点的指针_list_iterator(node* pnode):_pnode(pnode){}Ref operator*(){return _pnode->val;  }Ptr operator*(){return _pnode->val;  }bool operator!=(const self& s) const{return _pnode !=s._pnode;}Ptr operator->(){return &_pnode->val;}//++it ->it.operator++(&it)self& operator++(){_pnode = _pnode->_next;return *this;}self& operator--(){_pnode = _pnode->_prev;return *this;}// it++ -> it.operator(&it,0)self operator++(int){self tmp(*this);_pnode=_pnode->_next;return tmp;}self operator--(int){self tmp(*this);_pnode=_pnode->_prev;return tmp;}};template<class T>class list{typedef _list_node<T> node;public:typedef _list_node<T> node;typedef _list_iterator<T, T&, T*> iterator;typedef _list_iterator<T, const T&, const T*> const_iterator;iterator begin(){return  (iterator)_head->next;}iterator end(){return (iterator)_head;}const_iterator begin() const {return  (const_iterator)_head->next;}const_iterator end() const{return (const_iterator)_head;}list(){_head = new node(T());//也可以这样处理_head->_next=_head;_head->_prev=_head;}void push_back(){node* newnode=new node(x);node* tail=_head->_prev;newnode->_prev=tail;newnode->next=_head;tail->next=newnode;_head->_prev=newnode;}void insert(iterator pos,const T&x){node* cur=pos->_pnode;node* prev=cur->prev;node* newnode=new Node(x);prev->next=newcode;newcode->prev=prev;newcode->next=cur;cur->prev=newcode;}iterator erase(iterator pos){assert(pos->_pnode);assert(pos->_pnode->next!=pos->_node);node* prev=pos->_pnode->prev;node* next=pos->_pnode->next;delete pos->_pnode;prev->next=next;next->prev=prev; return iterator(next);//返回下一个位置的迭代器}void push_back(const T&x){insert(end(),x);}void push_front(const T&x){insert(begin(),x);}void pop_back(){erase(--end());}void pop_front(){erase(begin());}bool empty() const{return begin()==end();}//效率很低,放个变量在private里记录就行。stl后面版本实现了size_t size(){size_t sz=0;iterator it=begin();while(it!=end()){++sz;++it;}return sz;}private:node* _head;};
};

string,vector,list的迭代器

对于string和vector来说物理空间连续

  • string::iterator ——>char*

  • vector::iterator——>T*

而对于list来说物理空间不连续

假如用原生指针,Node*,解引用获得的不是值(是结点),++也不是跳到下一个元素。——>原生指针已经无法完成迭代器的功能。

_list_iterator去封装Node*,重载这个类的operator *,operator++等等运算符,去模拟像指针一样的行为。

有了这样的方式,不关心容器底层的结构到底是数组还是链表还是树形结构等等。用统一的方式封装了隐藏了底层的细节。——迭代器的价值

Container::iterator it=con.begin();
while(it!=con.end())
{*it;it++;
}
  • 迭代器遍历使用!=end(),既可以满足之前的顺序表,也可以满足现在的链表以及之后的stl
  • 对于迭代器采用的拷贝模式,因为想要指向空间即可,采用默认的浅拷贝。同时不析构,因为析构应是归list管的而不是迭代器管的。(不然每次开那么多迭代器数据就没了)
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 内存布局、堆空间、堆空间的初始化

    内存布局 每个应用都有自己独立的内存空间&#xff0c;其内存空间一般都有以下几大区域&#xff1a; 代码段&#xff08;代码区&#xff09;&#xff1a;用于存放代码。数据段&#xff08;全局区&#xff09;&#xff1a;用于存放全局变量等。栈空间&#xff1a;每调用一个函…...

    2024/4/18 21:29:58
  2. JAV练习题(Map双列集合)

    1.利用Map&#xff0c;完成下面的功能&#xff1a; 从命令行读入一个字符串&#xff0c;表示一个年份&#xff0c;输出该年的世界杯冠军是哪支球队。如果该年没有举办世界杯&#xff0c;则输出&#xff1a;没有举办世界杯。 历届世界杯冠军 届数 举办年份 冠军 第一届 1930年 乌…...

    2024/4/14 2:42:29
  3. 蓝桥杯学习笔记八:捕获计数器

    一、什么是捕获计数器&#xff08;说人话&#xff09;&#xff1f; 比如说&#xff0c;我们想知道一个高电平输入到某引脚持续的时间&#xff08;信号频率其实也是在求信号输入的持续时间&#xff09;&#xff0c;stm32里的定时器肯定是可以实现这一功能的。 我们刚所说的定时…...

    2024/4/20 2:21:06
  4. 美赛 5:评价类模型、插值与拟合模型(十大模型篇)

    目录 一、评价类模型 1.AHP&#xff08;层次分析法&#xff09; 2.TOPSIS法&#xff08;优劣解距离方法&#xff09; 二、插值与拟合模型 1.插值算法 2.拟合算法&#xff08;cftool工具箱&#xff09; 一、评价类模型 1.AHP&#xff08;层次分析法&#xff09; 最基础的…...

    2024/4/14 2:42:29
  5. 【ArcGIS微课1000例】0022:ArcGIS点(点坐标)自动连成线操作案例教程

    ArcGIS中,可以将带三维坐标(X、Y、Z)的点/点集自动连成线,本文演示具体操作流程。 文章目录 实战演练GPS点数据下载实战演练 打开ArcMap软件,添加实验文件夹0022下的GPS轨迹点.shp矢量点数据(文末提供下载地址),该数据是由GPS RTK采集的河道点数据,首先需要将GPS点坐…...

    2024/4/14 2:42:19
  6. 计算机网络-传输层-总结

    网络层 转发&#xff08;Forward&#xff09;&#xff1a;路由&#xff08;Routing&#xff09;&#xff1a;路由选择算法&#xff0c;转发表&#xff08;forwarding table&#xff09;链路层交换机&#xff08;link-layer switches&#xff09;&#xff1a;链路层设备。根据链…...

    2024/4/19 15:43:52
  7. 零基础Python爬虫教程,入门学习的三个阶段

    爬虫Python入门好学吗&#xff1f; 学爬虫需要具备一定的Python基础&#xff0c;有编程基础学Python爬虫更容易学。但要多看多练&#xff0c;有自己的逻辑想法。用Python达到自己的学习目的才算有价值。如果是入门学习了解&#xff0c;开始学习不难&#xff0c;但深入学习有难…...

    2024/4/25 11:46:24
  8. 第9期:C++与STL入门

    本文讲解一些在ACM中C的应用。 1 algorithm头文件 swap()函数不仅同时支持int、double等所有内置类型&#xff0c;甚至还支持用户自己编写的结构体。 2 stringstream 参考&#xff1a;C编程语言中stringstream类介绍​​​​​​ 例子&#xff1a;输入数据的每行包含若干个…...

    2024/4/14 2:43:20
  9. String、StringBuilder、StringBuffer三者的区别 + <数字反转>算法问题详解

    最近刷算法题&#xff0c;学到了很多关于字符串的知识&#xff0c;String类的题目还真是不简单&#xff0c;下面跟着bao小包同学来了解一下关于String、StringBuilder、StringBuffer三者之间的区别吧&#xff01; 一、它们都是用来处理字符串的 二、主要区别在于两个方面&…...

    2024/4/14 2:43:20
  10. springboot-请求映射源码分析

    ...

    2024/4/14 2:42:50
  11. 阿里巴巴每平每屋能让家居家装在“元宇宙”里畅游?

    文|智能相对论 作者|kinki 如果要问哪个行业离开互联网的距离最远&#xff0c;很多人会异口同声地回答是家居家装。品类复杂、非标化、信息不对称、行业壁垒深让使得家居家装成为了水最深的行业。 随着房地产的黄金时代已经渐行渐远&#xff0c;家装上下游的所有玩家都被倒逼…...

    2024/4/18 6:56:49
  12. 网络流模型与技巧总结

    文章目录前言常见基本模型最大匹配、最小点覆盖和最大独立集最大点权匹配最小路径覆盖不可重覆盖可重覆盖最大权闭合子图建图技巧利用拆点进行限流利用断边表示决策利用虚点表示组合关系链状模型通过拆点描述先后顺序改变边权实现双关键字优化技巧动态加点/加边优化更新残量网络…...

    2024/4/7 17:40:39
  13. vue-cli,webpack的使用,vue-router路由,vue+elementuUI,vue中的嵌套路由(子路由),参数传递和重定向,路由模式、404和路由钩子

    文章目录1.Vue-Cli1.1、Vue-Cli简介1.2、环境准备1.3 第一个vue-cli程序1.4webpack的使用2.vue-router路由2.1 安装2.2 测试路由3. vueelementuUI3.1 创建工程3.2 创建登录页面4. 嵌套路由&#xff08;子路由&#xff09;5. 参数传递和重定向5.1 参数传递5.2 重定向6 路由模式、…...

    2024/4/18 13:52:02
  14. Redis 高可用之切片集群

    Redis 高可用之切片集群前言如何保存更多数据&#xff1f;Redis 集群搭建 Redis 集群数据切片和实例的对应分布关系哈希槽与 Redis 实例映射客户端如何定位数据&#xff1f;计算键属于哪个槽判断槽是否由当前节点负责处理MOVED 错误重新分片ASK 错误ASK 和 MOVED 的区别复制与故…...

    2024/4/14 2:43:10
  15. [Vue warn]: Failed to resolve directive: focus

    报错代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…...

    2024/4/16 21:53:15
  16. 10:鸡与兔

    原题链接&#xff1a;OpenJudge - 10:Chickens and Rabbits 描述&#xff1a;你的院子里有C只鸡和R只兔子。一只鸡一个脑袋两条腿&#xff0c;一只兔子一个脑袋四条腿。现在你的院子里鸡与兔共有27个脑袋和86条腿&#xff0c;请找出鸡与兔的只数C与R。 输入&#xff1a;N/A …...

    2024/4/14 2:43:10
  17. 1.基于大数据体系构建的数据仓库-认识数据仓库

    基于大数据体系构建的数据仓库-认识数据仓库 文章目录基于大数据体系构建的数据仓库-认识数据仓库概述什么是数据仓库数据仓库的发展历程基于大数据的数仓构建特点数据仓库的应用范围与前景公众号参考概述 本文首先&#xff0c;介绍了数据仓库是什么&#xff1f; 它是一个面向…...

    2024/4/18 9:35:04
  18. c语言 汉诺塔问题 (递归问题)

    汉诺塔问题&#xff1a;又称 河内塔 &#xff0c;是一个源于 印度 古老传说的 益智玩具 。 大梵天 创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。说每次只能移动一个圆盘&#xff0c;而且要保证圆盘每次移动时&#xff0c;…...

    2024/4/25 15:01:30
  19. 自我修炼_初级算法篇_leetcode_第34题

    最大子序和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&…...

    2024/4/20 14:35:38
  20. 重定向、管道、grep高级使用

    文章目录一、重定向二、管道&#xff08;操作符号 | &#xff09;三.grep高级使用一、重定向 定义&#xff1a;将前面命令的输出&#xff0c;作为内容&#xff0c;写入到后面的文件 1. >:覆盖重定项 &#xff0c;会把后面写入文件的本身内容覆盖 2. >>:追加重定向&…...

    2024/4/14 2:43:20

最新文章

  1. Vue 3中,`toRef` 和 `toRefs`

    在Vue 3中&#xff0c;toRef 和 toRefs 是两个帮助函数&#xff0c;它们用于从 reactive 对象中提取出响应式的引用。这两个函数在处理复杂的响应式状态或者在组合式API中非常有用。 ### toRef toRef 创建一个 ref 对象&#xff0c;它是一个对于 reactive 对象中某个属性的响…...

    2024/5/4 15:19:12
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. CentOS 7查看磁盘空间

    CentOS如何查看硬盘大小&#xff1f; CentOS是一种基于Linux的操作系统&#xff0c;主要用于服务器端应用。在服务器管理中&#xff0c;硬盘大小是一个非常重要的指标&#xff0c;查看硬盘大小可以帮助系统管理员有效地管理硬盘空间和避免硬盘满了的情况。 方法一&#xff1a…...

    2024/5/2 21:49:22
  4. 路径规划——搜索算法详解(五):Dynamic A Star(D*)算法详解与Matlab代码

    昨天休息了一天&#xff0c;今天继续学习搜索算法&#xff01;前几天已经分别介绍了Dijkstra算法、Floyd算法、RRT算法、A*算法&#xff0c;无独有偶&#xff0c;上述算法都只适用于静态环境下两点规划的场景&#xff0c;但是大部分场景是实时变化的&#xff0c;这对规划算法提…...

    2024/5/3 19:17:12
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57