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

C++ | list

 前言

本篇博客讲解c++STL中的list

💓 个人主页:普通young man-CSDN博客

⏩ 文章专栏:C++_普通young man的博客-CSDN博客

⏩ 本人giee:   普通小青年 (pu-tong-young-man) - Gitee.com

      若有问题 评论区见📝

🎉欢迎大家点赞👍收藏⭐文章

本篇文章主要讲解list的用法和list的代码实现,这个list的用法和vector string的接口用法都差不多,所以我不会讲解太多,如果大家有疑问就去看我以前的博客

目录

list的介绍及使用

 1,介绍

2,使用

list的构造

list iterator的使用

list capacity

list element access

Modifiers:

list模拟实现

解析

1. 基础结构定义

list_node 结构体

2. 迭代器定义

list_iterator 结构体

3. 链表类定义

list 类

4. list 类的成员函数解析

构造与析构

插入与删除

迭代器操作

其他操作

5. 辅助函数

总结

注意事项


list的介绍及使用

 1,介绍

list - C++ Reference (cplusplus.com)icon-default.png?t=N7T8https://legacy.cplusplus.com/reference/list/list/?kw=list

  

这里可以看出list是一个双向带环的链表

2,使用

list的接口和我们之前的vector和string的用法差不多,以下我展示一些常见的接口

list的构造

构造函数(list::list - C++ Reference (cplusplus.com))描述
list()构造一个空的 std::list
list(size_type n, const value_type& val = value_type())构造一个包含 n 个值为 val 的元素的 std::list。如果 val 没有显式给出,则使用默认构造的值。
list(const list& x)拷贝构造函数,复制另一个 std::list 实例的内容。
list(InputIterator first, InputIterator last)从输入迭代器范围 [first, last) 构造一个新的 std::list,其中 first 和 last 分别是输入序列的开始和结束迭代器。

演示代码

template <class T>
void Print(const list<T>& tmp) {for (auto it : tmp){cout << it << " ";}cout << endl;
}
void test1() {//list<int> a1{ 1,2,3,4,5,6 };list<int> a1(10, 1);list<int> a2(a1.begin(),a1.end());list<int> a3(10, 2);a1 = a2;Print(a1);Print(a2);Print(a3);}

list iterator的使用

函数声明描述
begin()返回指向列表中第一个元素的双向迭代器。
end()返回指向列表中最后一个元素之后位置的双向迭代器。
rbegin()返回指向列表中最后一个元素的反向迭代器,即正向的 end() 位置。
rend()返回指向列表中第一个元素之前位置的反向迭代器,即正向的 begin() 位置。

演示代码

template <class T>
void Print(const list<T>& tmp) {//auto ch = tmp.begin();auto ch = tmp.begin();while (ch != tmp.end()){cout << *ch << " ";ch++;}for (auto it : tmp){cout << it << " ";}cout << endl;
}

list capacity

函数声明描述
empty()检测 std::list 是否为空。如果列表为空,则返回 true;否则返回 false
size()返回 std::list 中有效节点的个数。

演示代码

void test4() {list<int> a1;a1.push_back(1);a1.push_back(2);a1.push_back(3);if (a1.empty()){cout << "no empty"  << endl;}else{cout << "yes emptyz" << endl;}cout << a1.size() << endl;}

list element access

函数声明描述
front()返回 std::list 的第一个节点中值的引用。
back()

返回 std::list 的最后一个节点中值的引用。

Modifiers:

函数声明描述
push_front(val)在 std::list 的首元素前插入值为 val 的新元素。
pop_front()删除 std::list 中的第一个元素。
push_back(val)在 std::list 的尾部插入值为 val 的新元素。
pop_back()删除 std::list 中的最后一个元素。
insert(position, val)在 std::list 的指定位置 position 插入值为 val 的新元素。
erase(position)删除 std::list 中位于 position 的元素。
swap(list)交换当前 std::list 与另一个 std::list 中的所有元素。
clear()清空 std::list 中的所有有效元素。

这些接口以前都使用过,所以这里就不使用了

list的迭代器失效

vector里面insert和erase都会出现迭代器失效的问题,在list里面insert是不会出现迭代器失效的问题,为什么?因为他们不是在一个内存中操作,反之list的erase会出现迭代器失效的问题,因为当释放一个节点的时候指向那个节点的指针变成了野指针。

这里我们先看一下他的返回值是iterator

这边直接报错了

这个迭代器失效我们该如何去解决?

话可以实现一个删除所有的偶数

template <class T>
void Print(const list<T>& tmp) {//auto ch = tmp.begin();auto ch = tmp.begin();while (ch != tmp.end()){cout << *ch << " ";ch++;}cout << endl;for (auto it : tmp){cout << it << " ";}cout << endl;
}void test5() {int arr[] = { 1,2,3,4,5,6,7 };int n = sizeof(arr) / sizeof(arr[0]);list<int> a1(arr,arr+n);auto it = a1.begin();while (it != a1.end()){if (*it % 2 == 0) {a1.erase(it++);//将这个位置传过去之后}else{it++;}}Print(a1);
}

list模拟实现

只实现一些常用接口

#pragma once
#include <cassert>    // 包含断言头文件
#include <iostream>   // 包含输入输出流头文件
#include <initializer_list> // 包含用于初始化列表的头文件using namespace std;namespace yang {// 定义链表节点结构template<class T>struct list_node {T _data;       // 节点中存储的数据list_node<T>* _next; // 指向下一个节点的指针list_node<T>* _prev; // 指向前一个节点的指针// 构造函数,可选地初始化数据list_node(const T& data = T()): _data(data), _next(nullptr), _prev(nullptr) {}};// 迭代器结构template<class T, class Ref, class Ptr>struct list_iterator {typedef list_node<T> Node; // 节点类型的别名typedef list_iterator<T, Ref, Ptr> Self; // 迭代器类型的别名Node* _node; // 指向当前节点的指针// 构造函数,接受一个节点指针list_iterator(Node* node): _node(node) {}// 解引用运算符,返回数据的引用Ref& operator*() {return _node->_data;}// 成员访问运算符,返回指向数据的指针Ptr* operator->() {return &_node->_data;}// 前缀递增运算符,移动到下一个节点Self& operator++() {_node = _node->_next;return *this;}// 后缀递增运算符,移动到下一个节点,并返回旧值Self operator++(int) {Self tmp(*this);_node = _node->_next;return tmp;}// 前缀递减运算符,移动到前一个节点Self& operator--() {_node = _node->_prev;return *this;}// 后缀递减运算符,移动到前一个节点,并返回旧值Self operator--(int) {Self tmp(*this);_node = _node->_prev;return tmp;}// 等于运算符bool operator==(const Self& s) const {return _node == s._node;}// 不等于运算符bool operator!=(const Self& s) const {return _node != s._node;}};// 链表类定义template <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; // 常量迭代器的别名// 初始化为空链表void empty_init() {_head = new Node;_head->_next = _head;_head->_prev = _head;_size = 0;}// 默认构造函数list() {empty_init();}// 复制构造函数list(const list<T>& ls) {empty_init();for (auto& it : ls)push_back(it);}// 从初始化列表构造list(initializer_list<T> ls) {empty_init();for (auto& it : ls)push_back(it);}// 析构函数~list() {clear();delete _head;_head = nullptr;}// 交换函数void swap(list<T>& ls) {std::swap(_head, ls._head);std::swap(_size, ls._size);}// 赋值运算符,使用交换惯用法list<T>& operator=(list<T> ls) {swap(ls);return *this;}// 清除所有元素void clear() {auto it = begin();while (it != end()) {it = erase(it);}}// 在链表尾部添加元素void push_back(const T& val) {insert(end(), val);}// 在链表头部添加元素void push_front(const T& val) {insert(begin(), val);}// 在指定位置之前插入值iterator insert(iterator pos, const T& val) {Node* cur = pos._node;Node* prev = cur->_prev;Node* newnode = new Node(val);cur->_prev = newnode;newnode->_next = cur;prev->_next = newnode;newnode->_prev = prev;++_size;return iterator(newnode); // 返回指向新插入元素的迭代器}// 移除第一个元素void pop_front() {erase(begin());}// 移除最后一个元素void pop_back() {erase(--end());}// 移除指定位置的元素iterator erase(iterator pos) {Node* cur = pos._node;Node* next = cur->_next;Node* prev = cur->_prev;next->_prev = prev;prev->_next = next;delete pos._node;--_size;return iterator(next); // 返回指向下一个元素的迭代器}// 返回指向链表开始处的迭代器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);}// 返回链表的大小size_t size() const {return _size;}// 判断链表是否为空bool empty() const {return _size == 0;}private:Node* _head; // 指向头节点的指针size_t _size; // 链表中的元素数量};// 打印容器内元素的函数template <class Container>void Print_t(const Container& tmp) {for (auto ch = tmp.begin(); ch != tmp.end(); ++ch) {std::cout << *ch << " ";}cout << endl;}// 展示使用的函数void func(const list<int>& lt) {Print_t(lt);}// 测试函数void test1() {list<int> lt0({1, 2, 3, 4, 5, 6});list<int> lt1 = {1, 2, 3, 4, 5, 6, 7, 8};const list<int>& lt3 = {1, 2, 3, 4, 5, 6, 7, 8};func(lt0);Print_t(lt1);}
}

解析

以下是您提供的代码的详细解析:

1. 基础结构定义

list_node 结构体

这是链表的基本组成单元,它包含了一个数据成员 _data 和两个指针成员 _next_prev 分别指向链表中的下一个和前一个节点。

template<class T>
struct list_node {T _data;list_node<T>* _next;list_node<T>* _prev;list_node(const T& data = T()): _data(data), _next(nullptr), _prev(nullptr) {}
};

2. 迭代器定义

list_iterator 结构体

这是一个双向迭代器,它允许你从前向后或从后向前遍历链表。迭代器持有指向当前节点的指针 _node

template<class T, class Ref, class Ptr>
struct list_iterator {// ... iterator implementation ...
};

3. 链表类定义

list 类

这是一个模板类,实现了双向链表的基本功能,包括插入、删除、迭代等操作。

template <class T>
class list {// ... list implementation ...
};

4. list 类的成员函数解析

构造与析构
  • 默认构造函数:创建一个空链表。
  • 复制构造函数:通过拷贝另一个 list 对象来创建一个新的 list
  • 从初始化列表构造:通过给定的初始化列表来创建一个新的 list
  • 析构函数:释放链表中的内存资源。
list() {empty_init();
};list(const list<T>& ls) {empty_init();for (auto& it : ls)push_back(it);
};list(initializer_list<T> ls) {empty_init();for (auto& it : ls)push_back(it);
};~list() {clear();delete _head;_head = nullptr;
};
插入与删除
  • push_back:在链表尾部插入一个新元素。
  • push_front:在链表头部插入一个新元素。
  • insert:在给定迭代器的位置插入一个新元素。
  • pop_front:移除链表的第一个元素。
  • pop_back:移除链表的最后一个元素。
  • erase:移除指定迭代器位置的元素。
void push_back(const T& val) {insert(end(), val);
};void push_front(const T& val) {insert(begin(), val);
};iterator insert(iterator pos, const T& val) {// ... implementation details ...
};void pop_front() {erase(begin());
};void pop_back() {erase(--end());
};iterator erase(iterator pos) {// ... implementation details ...
};
迭代器操作
  • begin:返回指向链表开始位置的迭代器。
  • end:返回指向链表结束位置的迭代器(实际上是最后一个节点之后的位置)。
iterator begin() {return _head->_next;
};iterator end() {return _head;
};const_iterator begin() const {return _head->_next;
};const_iterator end() const {return _head;
};
其他操作
  • clear:移除链表中的所有元素。
  • size:返回链表中的元素个数。
  • empty:判断链表是否为空。
  • swap:交换两个链表的内容。
  • operator=:赋值操作符,使用交换惯用法实现。
void clear() {auto it = begin();while (it != end()) {it = erase(it);}
};size_t size() const {return _size;
};bool empty() const {return _size == 0;
};void swap(list<T>& ls) {// ... implementation details ...
};list<T>& operator=(list<T> ls) {swap(ls);return *this;
};

5. 辅助函数

这是一个通用的打印函数,可以用来打印任何实现了迭代器接口的容器。

template <class Container>
void Print_t(const Container& tmp) {// ... implementation details ...
}

总结

该实现提供了一个简单的双向链表,支持基本的操作,如插入、删除、遍历等。它还包含了一些辅助函数,比如 Print_t 用于打印链表内容,以及一个测试函数 test1 来展示如何使用这些功能。

注意事项

  • 代码中有一些注释掉的部分,例如 push_back 的原始实现,这些部分可以根据需要恢复。
  • 代码中没有实现 find 方法,如果需要查找特定元素,可以考虑实现该方法。
  • 代码中使用了 assert.h,但在实际的链表实现中可能不需要,因为没有使用断言的地方。
  • 可以考虑添加更多的安全检查,例如在删除元素时检查迭代器的有效性。

相关文章:

C++ | list

前言 本篇博客讲解cSTL中的list &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&…...

Vue3 v-bind 指令用法

在 Vue 3 中&#xff0c;v-bind 指令用于将表达式的值绑定到 DOM 元素的属性上。这个指令的语法与 Vue 2 相同&#xff0c;但有一些细微的变化和改进。 以下是 Vue 3 中 v-bind 指令的基本用法&#xff1a; 基本用法: <button v-bind:class"{ active: isActive }"…...

通过Go示例理解函数式编程思维

一个孩子要尝试10次、20次才肯接受一种新的食物&#xff0c;我们接受一种新的范式&#xff0c;大概不会比这个简单。-- 郭晓刚 《函数式编程思维》译者 函数式编程(Functional Programming, 简称fp)是一种编程范式&#xff0c;与命令式编程(Imperative Programming)、面向对象编…...

刷题DAY7

三角形面积 题目&#xff1a;已知三角形的边长a&#xff0c;b和从、&#xff0c;求其面积 输入&#xff1a;输入三个实数a&#xff0c;b&#xff0c;c&#xff0c;表示三边长 输出&#xff1a;输出面积&#xff0c;保留三位小数 输入&#xff1a;1 2 2.5 输出&#xff1…...

离线数据开发流程小案例-图书馆业务数据

参考 https://blog.csdn.net/m53931422/article/details/103633452 https://www.cnblogs.com/jasonlam/p/7928179.html https://cwiki.apache.org/confluence/display/Hive/LanguageManualUDF https://medium.com/jackgoettle23/building-a-hive-user-defined-function-f6abe9…...

GPT-5:未来已来,你准备好了吗

GPT-5&#xff1a;未来已来&#xff0c;你准备好了吗&#xff1f; 在人工智能的浩瀚星空中&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术如同璀璨星辰&#xff0c;不断引领着技术革新的浪潮。而在这股浪潮中&#xff0c;OpenAI的GPT&#xff08;Generative Pre-tr…...

白骑士的Matlab教学高级篇 3.2 并行计算

系列目录 上一篇&#xff1a;白骑士的Matlab教学高级篇 3.1 高级编程技术 并行计算是一种通过同时执行多个计算任务来加速程序运行的方法。在MATLAB中&#xff0c;并行计算工具箱&#xff08;Parallel Computing Toolbox&#xff09;提供了丰富的并行计算功能&#xff0c;使用…...

JS中【解构赋值】知识点解读

解构赋值&#xff08;Destructuring Assignment&#xff09;是 JavaScript 中一种从数组或对象中提取数据的简便方法&#xff0c;可以将其赋值给变量。这种语法可以让代码更加简洁、清晰。下面我会详细讲解解构赋值的相关知识点。 1. 数组解构赋值 数组解构赋值允许你通过位置…...

【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧:get_json_object

【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧&#xff1a;get_json_object 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; …...

第10章 无持久存储的文件系统 (1)

目录 前言 10.1 proc文件系统 10.1.1 /proc 内容 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 前言 即存在于内存中的文件系统。如&#xff1a; proc&#xff1a; sysfs&#xff1a; 即/sys目录。 内容不一定是ASCII文本&#xff0c;可能是二进…...

如何把命令行创建python虚拟环境与pycharm项目管理更好地结合起来

1. 问题的提出 我在linux或windows下的某个目录如“X”下使用命令行的方式创建了一个python虚拟环境&#xff08;参考文章&#xff09;&#xff0c;对应的目录为myvenv, 现在我想使用pycharm创建python项目myproject&#xff0c;并且利用虚拟环境myvenv&#xff0c;怎么办&…...

keepalived+lvs高可用负载均衡集群配置方案

配置方案 一、配置主备节点1. 在主备节点上安装软件2. 编写配置文件3. 启动keepalived服务 二、配置web服务器1. 安装并启动http服务2. 编写主页面3.配置虚拟地址4. 配置ARP 三、测试 服务器IP&#xff1a; 主负载均衡服务器 master 192.168.152.71备负载均衡服务器 backup 192…...

Azure OpenAI Swagger Validation Failure with APIM

题意&#xff1a;Azure OpenAI Swagger 验证失败与 APIM 问题背景&#xff1a; Im converting the Swagger for Azure OpenAI API Version 2023-07-01-preview from json to yaml 我正在将 Azure OpenAI API 版本 2023-07-01-preview 的 Swagger 从 JSON 转换为 YAML。 My S…...

haproxy高级功能配置

介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值&#xff0c;实现基于cookie的会话黏性&#xff0c;相对于基于 source 地址hash 调度算法对客户端的粒度更精准&#xff0c;但同时也加大了haproxy负载&#xff0c;目前此模式使用…...

XXL-JOB分布式定时任务框架快速入门

文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…...

直流电机及其驱动

直流电机是一种将电能转换为机械能的装置&#xff0c;有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转。 直流电机属于大功率器件&#xff0c;GPIO口无法直接驱动&#xff0c;需要配合电机驱动电路来操作 TB6612是一款双…...

Java-判断一个字符串是否为有效的JSON字符串

在 Java 中判断一个字符串是否为有效的 JSON 字符串&#xff0c;可以使用不同的库来进行验证。常见的库 包括 org.json、com.google.gson 和 com.alibaba.fastjson 等。这里我将展示如何使用 com.alibaba.fastjson 库来实现一个简单的工具类&#xff0c;用于判断给定的字符串…...

FPGA开发板的基本知识及应用

FPGA开发板是一种专门设计用于开发和测试现场可编程门阵列(Field-Programmable Gate Array, FPGA)的硬件平台。FPGA是一种高度可配置的集成电路&#xff0c;能够在制造后被编程以执行各种数字逻辑功能。FPGA开发板通常包含一个FPGA芯片以及一系列支持电路和接口&#xff0c;以便…...

JVM知识总结(性能调优)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 性能调优 何时进行JVM调优&#xff1f; 遇到以下情况&#xff0c…...

基于Ascend C的Matmul算子性能优化最佳实践

矩阵乘法是深度学习计算中的基础操作&#xff0c;对于提升模型训练和推理速度至关重要。昇腾AI处理器是一款专门面向AI领域的AI加速器&#xff0c;其AI Core采用达芬奇架构&#xff0c;以高性能Cube计算引擎为基础&#xff0c;针对矩阵运算进行加速&#xff0c;可大幅提高单位面…...

SQL注入之EVAL长度限制突破技巧

要求&#xff1a; PHP Eval函数参数限制在16个字符的情况下 &#xff0c;如何拿到Webshell&#xff1f; widows小皮环境搭建&#xff1a; 使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件&#xff0c;并在其输入代码环境 解题思路&#xff1a; 通…...

稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈

时间序列预测是许多领域的重要问题&#xff0c;包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中&#xff0c;提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻&#xff0c;但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…...

详谈系统中的环境变量

目录 前言1. 指令背后的本质2. 环境变量背后的本质3. 环境变量到底是什么4. 命令行参数5. 本地变量 与 内置命令6. 环境变量的相关命令 前言 相信在 it 行业学习或者工作的小伙伴们&#xff0c;基本都配置过环境变量&#xff08;windows环境下&#xff09;&#xff0c;如果你也…...

RAG与LLM原理及实践(11)--- Milvus hybrid search 源码分析及思想

目录 背景 hybrid search 源码分析 WeightedRanker 源码 hybrid search 核心 参数详解 基本入参 扩展入参 aysnc方式代码调用案例 说明 源码逻辑 prepare 调用过程 stub 调用结果 stub 调用过程 blocking 与 async 调用方式 深入内部core weightedRanker 的ch…...

JavaScript模拟空调效果

JavaScript模拟空调效果https://www.bootstrapmb.com/item/15074 在JavaScript中模拟空调效果主要依赖于前端界面的交互和状态变化&#xff0c;因为实际的温度调节、风扇速度调整等硬件操作无法直接通过JavaScript在浏览器中实现。不过&#xff0c;我们可以通过JavaScript来模…...

14.2 Pandas数据处理

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

python学习7---多进程

一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间&#xff0c;相互之间不干扰。 因为GIL锁的存在&#xff0c;对于CPU密集型任务&#xff08;例如计算密集型操作&#xff09;&#xff0c;使用多进程可以提高程序的效率。 优点&am…...

基于Spring + Vue的旅游景区项目+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员&#xff1a;订单数量统计&#xff0c;订单交易额统计&#xff0c;客房统计饼图&#xff0c;酒店…...

Java后端面试题

Redis缓存穿透、雪崩、击穿&#xff0c;布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上&#xff0c; 现在已经完成了分库分表&#xff0c; 现在的问题出现了&#xff0c; 需要继续新增数据库节点&#xff0c; 请…...

【Git】远程仓库新建分支后,拉到本地开发

1. 在远程仓库上创建分支 2. git fetch origin&#xff1a;在本地同步远程仓库的分支&#xff08;获取远程仓库所有分支的所有修改&#xff09; 3. git remote -a&#xff1a;查看所有分支&#xff08;远程&#xff0b;本地&#xff09; 4. git checkout -b 本地名 远程仓库…...

如何在阿里云上做网站备案/2021年网络营销考试题及答案

摘要:本文首先对图像增强的原理进行一定的描述&#xff0c;其次给出了直方图增强、平滑处理、锐化处理、以及彩色增强几种常用的增强方法。并且分别对几种增强方法的原理和处理效果进行了对比研究。同时对这几种增强方法处理方式进行一定的讨论&#xff0c;然后根据在MATLAB中试…...

设计网网站/外贸网站建站和推广

1 集合 集合是一个无序的&#xff0c;不重复的数据组合&#xff0c;它的主要作用如下&#xff1a; 去重&#xff0c;把一个列表变成集合&#xff0c;就自动去重了关系测试&#xff0c;测试两组数据之前的交集、差集、并集等关系创建集合 a {3, 5, 9, 9, 10} print(a) b ([1, …...

wordpress文章公众号/企业营销策划书范文

win7系统打开本地连接发现出现很多多余的本地连接&#xff0c;怎么删除呢&#xff1f;本地连接是电脑中最常见的图标之一&#xff0c;创建本地连接可以将计算机连接到局域网&#xff0c;实现上网&#xff0c;电脑中必须要有本地连接。正常情况下&#xff0c;我们只需要一个本地…...

深圳网站建设怎么办/网站要怎么创建

嗨, 欢迎来到课程的第一部分。 并行计算和Python入门。 在本节中, 我们将讨论并行计算和内存架构。 我们还将关注内存组织和并行编程模型。 接下来, 我们将看到如何设计并行程序, 并评估并行程序的性能。 此外, 我们将介绍Python。 并且我们将与流程一起工作, 并与他们一起调节…...

怎么做中英文网站/seo案例分析

struts2.0 hibernate oracle 分页问题 最近弄了下 struts2.0 hibernate oracle 分页问题的 从网上搜了些资料。总觉得不是很合心意。自己做了例子。 ueser.sql Sql代码 DROP TABLE "SCOTT"."T_USER" cascade constraints; DROP SEQUENCE "…...

电脑买编程代码做网站/腾讯广告推广怎么做

1、前述介绍我在测试一个智能对话项目时需要评估对话的准确率&#xff0c;就设计了一些问题放到excel表中&#xff0c;读取问题并触发问答后把响应信息按需要的数据写入到另外一个excel中。基于这个&#xff0c;我分别写了读excel函数和写excel函数。使用方法、注意事项、参数介…...