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

探索C++11:解锁现代编程(3)

1.包装器

1.1function

std::function 是 C++ 标准库中的一个模板类,位于 <functional> 头文件中。它用于封装可调用对象,包括普通函数、Lambda 表达式、函数对象、成员函数等。std::function 提供了极大的灵活性,使得你可以将不同类型的可调用对象统一管理。

std::function 的组成部分

1.模板参数

std::function 的模板参数定义了它所封装的函数的签名。例如:

std::function<ReturnType(ParamType1, ParamType2, ...)>

ReturnType:函数的返回类型。ParamType1, ParamType2, ...:函数的参数类型。

 2.构造函数

 std::function 提供了多种构造函数,用于封装不同类型的可调用对象。

  • 默认构造函数: 
std::function<int(int, int)> func; 

创建一个空的 std::function 对象,不绑定任何可调用对象。

  •  普通函数构造
int add(int a, int b) {return a + b;
}std::function<int(int, int)> func = add;

将普通函数 add 封装到 std::function 中。

  • Lambda 表达式构造: 
std::function<int(int, int)> func = [](int a, int b) { return a + b; };

 将 Lambda 表达式封装到 std::function 中。

  • 函数对象构造: 
struct Adder {int operator()(int a, int b) {return a + b;}
};std::function<int(int, int)> func = Adder();

将函数对象 Adder 封装到 std::function 中。

  • 成员函数构造: 
class MyClass {
public:int add(int a, int b) {return a + b;}
};MyClass obj;
std::function<int(MyClass&, int, int)> func = &MyClass::add;

 将成员函数 add 封装到 std::function 中。

#include<functional>
int f(int a, int b)
{return a + b;
}
struct Functor
{
public:int operator() (int a, int b){return a + b;}
};
class Plus
{
public:Plus(int n = 10):_n(n){}static int plusi(int a, int b){return a + b;}double plusd(double a, double b){return (a + b) * _n;}
private:int _n;
};
int main()
{// 包装各种可调⽤对象function<int(int, int)> f1 = f;function<int(int, int)> f2 = Functor();function<int(int, int)> f3 = [](int a, int b) {return a + b; };cout << f1(1, 1) << endl;cout << f2(1, 1) << endl;cout << f3(1, 1) << endl;// 包装静态成员函数// // 成员函数要指定类域并且前⾯加&才能获取地址function<int(int, int)> f4 = &Plus::plusi;cout << f4(1, 1) << endl;// 包装普通成员函数// 普通成员函数还有⼀个隐含的this指针参数,所以绑定时传对象或者对象的指针过去都可以function<double(Plus*, double, double)> f5 = &Plus::plusd;Plus pd;cout << f5(&pd, 1.1, 1.1) << endl;// 显式传递对象指针function<double(Plus, double, double)> f6 = &Plus::plusd;cout << f6(pd, 1.1, 1.1) << endl;// 传递对象副本// pd 被拷贝生成临时对象,临时对象的地址被隐式作为 this 指针。function<double(Plus&&, double, double)> f7 = &Plus::plusd;cout << f7(move(pd), 1.1, 1.1) << endl; 传递右值引用cout << f7(Plus(), 1.1, 1.1) << endl;//传递临时对象(右值)return 0;
}

参数对比

参数类型传递方式对象所有权性能开销适用场景
Plus*指针传递操作原对象需修改原对象或避免拷贝
Plus值传递(副本)操作临时副本拷贝构造开销安全但低效,适用于小型对象
Plus&&右值引用操作临时或移动对象无或移动开销高效传递临时对象或资源转移

1.2bind 

调⽤bind的⼀般形式: auto newCallable = bind(callable,arg_list); 其中newCallable本⾝是⼀个可调⽤对象,arg_list是⼀个逗号分隔的参数列表,对应给定的callable的参数。当我们调⽤newCallable时,newCallable会调⽤callable,并传给它arg_list中的参数。
arg_list中的参数可能包含形如_n的名字,其中n是⼀个整数,这些参数是占位符,表示newCallable的参数,它们占据了传递给newCallable的参数的位置。数值n表⽰⽣成的可调⽤对象
中参数的位置:_1为newCallable的第⼀个参数,_2为第⼆个参数,以此类推。_1/_2/_3....这些占
位符放到placeholders的⼀个命名空间中。

 

#include<functional>
using placeholders::_1;
using placeholders::_2;
using placeholders::_3;
int Sub(int a, int b)
{return (a - b) * 10;
}
int SubX(int a, int b, int c)
{return (a - b - c) * 10;
}
class Plus
{
public:static int plusi(int a, int b){return a + b;}double plusd(double a, double b){return a + b;}
};
int main()
{auto sub1 = bind(Sub, _1, _2);cout << sub1(10, 5) << endl;// bind 本质返回的⼀个仿函数对象// 调整参数顺序(不常⽤)// _1代表第⼀个实参// _2代表第⼆个实参// ...auto sub2 = bind(Sub, _2, _1);cout << sub2(10, 5) << endl;auto sub3 = bind(Sub, 100, _1);cout << sub3(5) << endl;auto sub4 = bind(Sub, _1, 100);cout << sub4(5) << endl;auto sub5 = bind(SubX, 100, _1, _2);cout << sub5(5, 1) << endl;auto sub6 = bind(SubX, _1, 100, _2);cout << sub6(5, 1) << endl;auto sub7 = bind(SubX, _1, _2, 100);cout << sub7(5, 1) << endl;// 成员函数对象进⾏绑死,就不需要每次都传递了function<double(Plus&&, double, double)> f6 = &Plus::plusd;Plus pd;cout << f6(move(pd), 1.1, 1.1) << endl;cout << f6(Plus(), 1.1, 1.1) << endl;// bind⼀般⽤于,绑死⼀些固定参数function<double(double, double)> f7 = bind(&Plus::plusd, Plus(), _1, _2);cout << f7(1.1, 1.1) << endl;// 成员函数指针:&Plus::plusd。// 对象实例:Plus()(临时对象)。// 参数占位符:_1 和 _2(表示调用时的参数)。// 计算复利的lambdaauto func1 = [](double rate, double money, int year)->double {double ret = money;for (int i = 0; i < year; i++){ret += ret * rate;}return ret - money;};return 0;
}
  •  头文件与命名空间
#include <functional>
using namespace std::placeholders;  // 启用占位符 _1, _2, _3

<functional>:提供 std::bindstd::function 等功能。

placeholders:定义占位符 _1(第一个参数)、_2(第二个参数)等。

  • std::bind 基础用法 
auto sub1 = bind(Sub, _1, _2);
cout << sub1(10, 5) << endl;  // 输出 (10-5)*10 = 50

作用:将 Sub 的参数按顺序绑定为 _1(第一个实参)、_2(第二个实参)。

等效调用Sub(10, 5)

  • 调整参数顺序
auto sub2 = bind(Sub, _2, _1);
cout << sub2(10, 5) << endl;  // 输出 (5-10)*10 = -50

参数交换_2 绑定到第一个参数位置,_1 绑定到第二个位置。

等效调用Sub(5, 10)

  • 固定部分参数 
auto sub3 = bind(Sub, 100, _1);
cout << sub3(5) << endl;  // 输出 (100-5)*10 = 950auto sub4 = bind(Sub, _1, 100);
cout << sub4(5) << endl;  // 输出 (5-100)*10 = -950

 固定参数:将 Sub 的第一个参数固定为 100,第二个参数由 _1 提供。

 等效调用Sub(100, 5) 和 Sub(5, 100)

  • 绑定多参数函数 
auto sub5 = bind(SubX, 100, _1, _2);
cout << sub5(5, 1) << endl;  // 输出 (100-5-1)*10 = 940auto sub6 = bind(SubX, _1, 100, _2);
cout << sub6(5, 1) << endl;  // 输出 (5-100-1)*10 = -960auto sub7 = bind(SubX, _1, _2, 100);
cout << sub7(5, 1) << endl;  // 输出 (5-1-100)*10 = -960

参数绑定规则

sub5SubX(100, 5, 1)sub6SubX(5, 100, 1)sub7SubX(5, 1, 100)

  • 成员函数绑定 
function<double(Plus&&, double, double)> f6 = &Plus::plusd;
Plus pd;
cout << f6(move(pd), 1.1, 1.1) << endl;  // 输出 2.2
cout << f6(Plus(), 1.1, 1.1) << endl;     // 输出 2.2

右值引用绑定

f6 接受 Plus&&(右值引用),调用时需传递临时对象或使用 std::move

非静态成员函数 plusd 的 this 指针来自绑定的对象。

  • 使用 bind 简化成员函数调用
function<double(double, double)> f7 = bind(&Plus::plusd, Plus(), _1, _2);
cout << f7(1.1, 1.1) << endl;  // 输出 2.2

固定对象实例

bind 的第一个参数是成员函数地址,第二个参数是绑定的对象实例 Plus()(临时对象)。

调用 f7 时只需传递 a 和 b,无需显式传递对象。

// 伪代码:内部行为
Plus temp = Plus();            // 创建临时对象
temp.plusd(1.1, 1.1);         // 调用成员函数

Plus::plusd:仅表示成员函数的地址,不需要对象实例。

Plus():构造临时对象供 std::bind 存储副本,用于后续调用时提供 this 指针。

2.const限定符

2.1顶层const和底层const

  • 指针本⾝是⼀个对象,它有可以指向另⼀个对象,因此指针涉及到本⾝是不是const和指向对象是不是const的问题,C++⽤为了好区分,把本⾝被const修饰叫做顶层const,把指向的对象被const修饰叫做底层const。
  • ⼤多数对象被const修饰都叫顶层const,指针被const修饰时,*左边的const叫底层const,*右边的const叫做顶层const。
  • const修饰引⽤时,这个const是底层const。

 

int main()
{int i = 0;int* const p1 = &i; // 顶层constconst int ci = 42; // 顶层constconst int* p2 = &ci; // 底层constconst int& r = ci; // 底层constreturn 0;
}

2.2constexpr

constexpr 是 C++11 引入的关键字,用于声明在编译时可求值的表达式、变量或函数。它的核心目的是将计算移到编译期,提升运行时效率,并支持在需要编译期常量的上下文中使用(如数组大小、模板参数等)

constexpr 与 const 的区别

特性constexprconst
求值时机强制编译期求值可能为编译期或运行时常量
适用场景数组大小、模板参数等需编译期确定值的场景运行时常量或只读变量
函数修饰可修饰函数仅修饰变量或成员函数

constexpr 变量

作用:声明变量为编译期常量。

规则

  • 必须用常量表达式初始化。

  • 所有声明为 constexpr 的变量隐含为 const

 

constexpr int size = 10;          // 正确
int arr[size];                     // 合法,数组大小需编译期确定int runtime_val = 5;
constexpr int invalid = runtime_val; // 错误!runtime_val 不是常量表达式

constexpr 函数

作用:允许函数在编译时求值(若参数为常量表达式)。

规则

  • C++11:函数体只能包含一条 return 语句,不能有循环、局部变量等。

  • C++14 起:允许更复杂的逻辑(如循环、条件、局部变量)。

  • 参数和返回值必须是字面类型(Literal Type)。

 

// C++11 风格(简单返回)
constexpr int add(int a, int b) {return a + b;
}// C++14 风格(允许复杂逻辑)
constexpr int factorial(int n) {int result = 1;for (int i = 1; i <= n; ++i) {result *= i;}return result;
}constexpr int sum = add(3, 4);         // 编译时计算,sum=7
constexpr int fact_5 = factorial(5);   // 编译时计算,fact_5=120

constexpr 构造函数与对象

作用:允许在编译时构造对象。

规则

  • 构造函数必须初始化所有成员。

  • 成员函数若为 constexpr,可被编译时调用。

class Point {
public:constexpr Point(int x, int y) : x_(x), y_(y) {}constexpr int x() const { return x_; } // C++11: 必须为 const 成员函数constexpr int y() const { return y_; }
private:int x_, y_;
};constexpr Point p(3, 4);            // 编译时构造对象
constexpr int px = p.x();           // px=3

3.处理类型

3.1auto

基本用法

auto x = 42;            // x 被推导为 int
auto y = 3.14;          // y 被推导为 double
auto str = "hello";     // str 被推导为 const char*
int a = 10;
const auto& ref = a;     // ref 是 const int&
auto ptr = &a;           // ptr 是 int*

常见应用场景

(1)简化复杂类型

std::vector<std::map<std::string, std::list<int>>> data;
auto it = data.begin();  // 无需写冗长的迭代器类型

 (2)范围for循环

std::vector<int> vec = {1, 2, 3};
for (auto num : vec) {       // 拷贝元素(num 是 int)// ...
}
for (const auto& num : vec) { // 避免拷贝(num 是 const int&)// ...
}

   (3) Lambda 表达式

auto lambda = [](int x) { return x * 2; };
std::function<int(int)> func = lambda;

(4) 返回值类型推导(C++14+)

auto add(int a, int b) {     // 返回类型自动推导为 intreturn a + b;
}

(5) 结构化绑定(C++17+)

std::pair<int, double> p = {1, 2.5};
auto [x, y] = p;        // x 是 int, y 是 double

3.2typedef和using

  • C++98中我们⼀般使⽤typedef重定义类型名,也很⽅便,但是typedef不⽀持带模板参数的类型重定义。C++11中新增了using可以替代typedef,using 的别名语法覆盖了 typedef 的全部功能,还⽀持带模板参数重定义的语法。
  • using 类型别名 = 类型;
#include <map>
#include <string>
using namespace std;//typedef map<string, int> CountMap;
//typedef map<string, string> DictMap;
//typedef int DateType;// using 兼容typedef的⽤法
using CountMap = map<string, int>;
using DictMap = map<string, string>;
using STDateType = int;// using⽀持带模板参数的类型重定义
template<class Val>
using Map = map<string, Val>;template<class Val>
using MapIter = typename map<string, Val>::iterator;

 

相关文章:

探索C++11:解锁现代编程(3)

1.包装器 1.1function std::function 是 C 标准库中的一个模板类&#xff0c;位于 <functional> 头文件中。它用于封装可调用对象&#xff0c;包括普通函数、Lambda 表达式、函数对象、成员函数等。std::function 提供了极大的灵活性&#xff0c;使得你可以将不同类型的…...

软件工程(应试版)图形工具总结(二)

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 教材参考《软件工程导论&#xff08;第六版&#xff09;》 七、 层次图&#xff08;H图&#xff09;与HIPO图 1、概述 1.1、层次图&#xff08;Hierarchy Chart / H图&#xff09; ​核心…...

人工智能在前端开发中的应用探索

一、人工智能在前端开发中的应用场景 人工智能&#xff08;AI&#xff09;技术的快速发展为前端开发带来了新的机遇和挑战。AI在前端开发中的应用主要集中在以下几个方面&#xff1a;智能代码生成、自动化测试、个性化推荐、智能交互设计以及性能优化。这些应用场景不仅提高了…...

木马学习记录

一句话木马是什么 一句话木马就是仅需要一行代码的木马&#xff0c;很简短且简单&#xff0c;木马的函数将会执行我们发送的命令 如何发送命令&#xff06;发送的命令如何执行? 有三种方式&#xff1a;GET&#xff0c;POST&#xff0c;COOKIE&#xff0c;一句话木马中用$_G…...

WebSocket 也有跨域问题?如何让 Spring Boot WebSocket 允许跨域连接?

前言 在现代 Web 开发中&#xff0c;跨域问题一直是开发者必须面对的挑战。无论是传统的 HTTP 请求还是实时通信的 WebSocket&#xff0c;浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;都可能成为功能实现的拦路虎。许多开发者对 HTTP 的跨域解决方案&#xff…...

音视频入门基础:MPEG2-PS专题(8)——使用Wireshark分析GB28181的PS流

音视频入门基础&#xff1a;MPEG2-PS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;1&#xff09;——MPEG2-PS官方文档下载 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ps文件 音视频入门基础…...

Bash详解

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ Bash详解 Bash(Bourne Again SHell)是Linux和Unix系统中最常用的命令行解释器之一。它不仅提供了强大的命令行操作功能,还支持脚本编程,使得用户能够自动化任务和实现复杂的操作。本文将详细介绍Bash…...

WORD+VISIO输出PDF图片提高清晰度的方法

WORDVISIO输出PDF图片提高清晰度的方法 part 1: visio 绘图part 2: word 导出 part 1: visio 绘图 先在visio中把图片和对应的文字调整为适合插入到文章中的尺寸&#xff1b; 在visio中把所有元素进行组合&#xff1b; 把组合后的图片长和宽等比例放缩&#xff0c;如放大10倍…...

springMVC--Controller配置总结

控制器Controller 控制器复杂提供访问应用程序的行为&#xff0c;通常通过接口定义或注解定义两种方式 控制器负责解析客户的请求并转换成一个模型 在springMVC中&#xff0c;一个控制器类可以包含多种方法 在springMVC中&#xff0c;对于controller的配置有多种 实现Contr…...

JavaScript BOM核心对象、本地存储

目录 BOM 核心对象详解 一、location 对象 1. 常用属性 2. 常用方法 3. 应用场景 二、navigator 对象 1. 核心属性 2. 常用方法 3. 应用场景 三、history 对象 1. 核心属性和方法 2. 应用场景 四、兼容性与注意事项 五、总结 本地存储与复杂数据类型处理 一、本…...

单元测试之测试覆盖率-jacoco基本使用

简介 免费的、开源的、针对java的单元测试覆盖率工具。基于字节码&#xff0c;无需源码也可以工作。 代码覆盖率&#xff1a;用来衡量测试代码对功能代码的测试情况&#xff0c;量化说明测试的充分度。通过执行测试用例&#xff0c;功能代码中的哪些行被执行了&#xff0c;哪…...

css3.31面试题

CSS 相关的面试题一般围绕基础知识、布局、性能优化、兼容性、深入原理等几个方向。以下是一些常见的面试题总结&#xff1a; CSS 基础知识 盒模型&#xff08;Box Model&#xff09;是什么&#xff1f;有哪些类型&#xff1f; px、em、rem、vw、vh、% 的区别&#xff1f; …...

Nature Electronics|一种透气、可拉伸的液态金属基3D电子皮肤系统(健康监测/可穿戴电子/透汗透气性电子/电子皮肤/柔性电子/集成电路)

一、 摘要 穿戴式和皮肤电子设备的发展要求高密度可伸展电子系统能够与软组织共形,持续运行并提供长期的生物相容性。大多数可拉伸电子系统的集成密度低,并且与外部印刷电路板连接,这限制了功能,降低了用户体验并阻碍了长期可用性。在此,作者提出了一种可渗透的三维集成电…...

【家政平台开发(15)】解锁Spring Boot:家政平台后端开发全攻略

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析&#xff0c;剖析家政行业现状、挖掘用户需求与梳理功能要点&#xff0c;到系统设计阶段的架构选型、数据库构建&#xff0c;再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化…...

AI Agent设计模式二:Parallelization

概念 &#xff1a;并行任务执行引擎 ✅ 优点&#xff1a;提升吞吐量&#xff0c;充分利用多核资源❌ 缺点&#xff1a;复杂度高&#xff0c;存在竞态条件风险 from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, START, END from typing impor…...

Upload-labs靶场通关

之前搭好了靶场&#xff0c;Upload-labs 靶场搭建 及一句话木马的原理与运用-CSDN博客 今天开始通关并写详细流程 Pass-1 来到靶场的第一关 先随便上传php 代码 点击上传 发现文件类型被限制了 方法1&#xff1a; 改文件后缀为合法文件&#xff08;.jpg .png .gif&#xf…...

Python数据结构之有序列表

一.基本介绍 在有序列表中&#xff0c;元素的相对位置取决于它们的基本特征。它们通常以升序或者降序排列&#xff0c;并且我们假设元素之间能进行有意义的比较。有序列表和无序列表(链表)的许多操作都是相同的。 二.代码实现 class OrderedList:"""有序列表类…...

LMK04828使用指南-01-简介与引脚功能描述

简介 LMK0482x系列是业界性能最高的时钟调节器&#xff0c;支持JEDEC JESD204B。 PLL2的14个时钟输出可以配置为使用设备和SYSREF时钟驱动七个JESD204B转换器或其他逻辑设备。可以使用直流和交流耦合提供SYSREF。不限于JESD204B应用&#xff0c;14个输出中的每一个都可以单独…...

统计学基本原理

目录 文章目录 目录统计学统计学基本概念描述性统计数据可视化图表工具 汇总统计统计数据的分布情况&#xff1a;中位数、众数、平均值统计数据的离散程度&#xff1a;极差、方差、标准差、离散系数 相关分析Pearson 线性关系相关系数Spearman 单调关系相关系数 回归分析回归模…...

日常真实工作环境,Mysql常用操作命令,笔记!

1、开放增删改查权限&#xff0c;不开放表结构修改权限 有许多生产环境是不需要修改表结构的&#xff0c;也是为了防止SQL注入。 创建用户 mysql> grant all on *.* to ie% identified by test1设置权限 1.首先我们先回收所有权限。 revoke all on *.* from ie% ;2.设…...

洛谷题单3-P1307 [NOIP 2011 普及组] 数字反转-python-流程图重构

题目描述 给定一个整数 N N N&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后得到的新数的最高位数字不应为零&#xff08;参见样例 2&#xff09;。 输入格式 一个整数 N N N。 …...

洛谷题单3-P1420 最长连号-python-流程图重构

题目描述 输入长度为 n n n 的一个正整数序列&#xff0c;要求输出序列中最长连号的长度。 连号指在序列中&#xff0c;从小到大的连续自然数。 输入格式 第一行&#xff0c;一个整数 n n n。 第二行&#xff0c; n n n 个整数 a i a_i ai​&#xff0c;之间用空格隔开…...

PostgreSQL:表分区与继承

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【NLP 55、投机采样加速推理】

目录 一、投机采样 二、投机采样改进&#xff1a;美杜莎模型 流程 改进 三、Deepseek的投机采样 流程 Ⅰ、输入文本预处理 Ⅱ、引导模型预测 Ⅲ、候选集筛选&#xff08;可选&#xff09; Ⅳ、主模型验证 Ⅴ、生成输出与循环 骗你的&#xff0c;其实我在意透了 —— 25.4.4 一、…...

CSS 创建与使用学习笔记

一、CSS 的作用 CSS&#xff08;层叠样式表&#xff09;用于控制 HTML 文档的样式和布局。当浏览器读取一个样式表时&#xff0c;它会根据样式表中的规则来格式化 HTML 文档&#xff0c;从而实现页面的美化和布局调整。 二、插入样式表的方法 CSS 可以通过以下三种方式插入到…...

CSS Id 和 Class 选择器学习笔记

一、概述 在 CSS 中&#xff0c;id 和 class 选择器是用于为 HTML 元素指定样式的强大工具。它们可以帮助我们精确地控制页面中元素的样式&#xff0c;让页面设计更加灵活和高效。 二、id 选择器 1. 定义和使用 定义&#xff1a;id 选择器用于为具有特定 id 属性的 HTML 元素…...

从小米汽车事故反思 LabVIEW 开发

近期&#xff0c;小米汽车的一起严重事故引发了社会各界的广泛关注。这起事故不仅让我们对智能汽车的安全性产生了深深的思考&#xff0c;也为 LabVIEW 开发领域带来了诸多值得汲取的知识与领悟。 在智能汽车领域&#xff0c;尤其是涉及到智能驾驶辅助系统时&#xff0c;安全是…...

解锁工业通信:Profibus DP到ModbusTCP网关指南!

解锁工业通信&#xff1a;Profibus DP到ModbusTCP网关指南&#xff01; 在工业自动化领域&#xff0c;随着技术的不断进步和应用场景的日益复杂&#xff0c;不同设备和系统之间的通讯协议兼容性问题成为了工程师们面临的一大挑战。尤其是在Profibus DP和Modbus/TCP这两种广泛应…...

web漏洞靶场学习分享

靶场&#xff1a;pikachu靶场 pikachu漏洞靶场漏洞类型: Burt Force(暴力破解漏洞)XSS(跨站脚本漏洞)CSRF(跨站请求伪造)SQL-Inject(SQL注入漏洞)RCE(远程命令/代码执行)Files Inclusion(文件包含漏洞)Unsafe file downloads(不安全的文件下载)Unsafe file uploads(不安全的文…...

【C++学习笔记】十三、速通笔记

完整的C编程教程 目录 开发环境配置C知识体系现代C特性设计模式数据结构CMake项目构建调试技巧进阶主题学习资源 1. 开发环境配置 1.1 安装编译器 sudo apt-get install g build-essential1.2 安装构建工具 sudo apt-get install cmake1.3 VS Code配置 安装C扩展配置调试…...

硬件电路(23)-输入隔离高低电平有效切换电路

一、概述 项目中为了防止信号干扰需要加一些隔离电路&#xff0c;而且有时传感器的信号是高有效有时是低有效&#xff0c;所以基于此背景&#xff0c;设计了一款方便实现高低电平有效检测切换电路。 二、应用电路...

基于深度学习的多模态癌症数据集调研

基于深度学习的多模态癌症数据集调研 关键词&#xff1a; 癌症、分割、多模态、radiology、pathology、深度学习 目录&#xff1a; 一、 数据集总结 二、 胶质瘤/脑肿瘤&#xff08;glioma&#xff09; 三、 肺癌/非小细胞肺癌&#xff08;NSCLC&#xff09; 四、 乳腺癌&am…...

Logo语言的系统监控

Logo语言的系统监控 引言 在信息技术飞速发展的时代&#xff0c;系统监控成为了确保计算机系统和网络平稳运行的重要手段。系统监控不仅可以实时跟踪系统的性能、资源使用情况和安全风险等&#xff0c;还能够在出现问题时及时发出警报&#xff0c;从而避免潜在的故障和损失。…...

Go语言-初学者日记(八):构建、部署与 Docker 化

&#x1f9f1; 一、go build&#xff1a;最基础的构建方式 Go 的构建工具链是出了名的轻量、简洁&#xff0c;直接用 go build 就能把项目编译成二进制文件。 ✅ 构建当前项目 go build -o myapp-o myapp 指定输出文件名默认会构建当前目录下的 main.go 或 package main &a…...

青少年编程与数学 02-015 大学数学知识点 08课题、信息论

青少年编程与数学 02-015 大学数学知识点 08课题、信息论 一、信息论基础二、熵与信息量三、信源编码四、信道编码五、率失真理论六、信息论的应用七、网络信息论八、信息论与统计学习九、量子信息论十、信息论的前沿研究总结 信息论是研究信息传输、存储和处理的数学理论&…...

【已解决】Webstorm 每次使用 git pull/push 都要输入令牌/密码登录

解决办法&#xff1a;勾上【使用凭据帮助程序】&#xff08;英文&#xff1a;Use credential helper&#xff09;...

FreeRTOS:嵌入式实时操作系统的轻量化解决方案

一、FreeRTOS 的核心定位 FreeRTOS&#xff08;Free Real-Time Operating System&#xff09;是一款专为微控制器及资源受限的嵌入式设备设计的开源实时操作系统内核。自2003年由Richard Barry发布以来&#xff0c;其以轻量化、高实时性、低资源占用的特点&#xff0c;成为物…...

Linux操作系统 4.Linux实用操作

一、各类小技巧&#xff08;快捷键&#xff09; 强制停止 退出、登出 历史命令搜索 光标移动 1.CTRL C 强制停止 1.Linux某些程序的运行&#xff0c;如果想要强行停止它&#xff0c;可以使用ctrlc 2.命令输入错误&#xff0c;也可以通过快捷键ctrl c,退出当前输入&#xff0…...

学透Spring Boot — 010. 单元测试和Spring Test

系列文章目录 这是CSDN postnull 博客《学透Spring Boot》系列的一篇&#xff0c;更多文章请移步&#xff1a;Postnull - 学透Spring Boot系列文章 文章目录 系列文章目录前言1. 基本概念UT 单元测试TDD 测试驱动开发UT测试框架Mock框架 3. Spring Test为什么要用Spring Test引…...

Perl语言的文件系统

Perl语言中的文件系统操作 引言 在软件开发中&#xff0c;文件系统操作是一个不可或缺的部分。无论是简单的文件读取、写入&#xff0c;还是复杂的文件管理&#xff0c;合理的文件系统操作都能极大提升程序的效率和可维护性。Perl语言是一种强大的文本处理语言&#xff0c;凭…...

ffmpeg基础指令学习

文章目录 1. **基本的 FFmpeg 语法**2. **常见的 FFmpeg 基础指令****1. 转换视频格式****2. 视频剪切****3. 转换视频的编码****4. 提取音频****5. 改变视频分辨率****6. 改变音视频的比特率****7. 合并音视频****8. 提取视频中的一帧图片****9. 提取视频的帧速率&#xff08;…...

英国电商物流变革:ebay私人卖家如何借势简易配送提升履约效率?

近年来&#xff0c;英国电商物流正在经历一场不小的变革。从“等待5-7个工作日”到如今“次日达”成为常态&#xff0c;市场和用户对配送效率的要求越来越高。对于在 eBay 平台上的私人卖家来说&#xff0c;这既是挑战&#xff0c;也是机会。如何用有限的资源跟上平台和消费者对…...

第15周:注意力汇聚:Nadaraya-Watson 核回归

注意力汇聚&#xff1a;Nadaraya-Watson 核回归 Nadaraya-Watson 核回归是一个经典的注意力机制模型&#xff0c;它展示了如何通过注意力权重来对输入数据进行加权平均。以下是该内容的核心总结&#xff1a; 关键概念 注意力机制框架&#xff1a;由查询&#xff08;自主提示…...

批量图片文本识别重命名,批量ocr识别图片重命名,基于WPF和腾讯OCR云部署实,现批量对图片局部提取文字后重命名的操作详细步骤

​​1. 项目背景​​ 在日常工作中,我们经常需要处理大量图片文件,这些图片可能包含重要的文字信息。为了提高工作效率,我们需要一种自动化的方式,从图片中提取文字,并根据提取的文字对图片进行重命名。 本项目基于 ​​WPF​​ 框架开发桌面应用程序,结合 ​​腾讯 OCR…...

26考研——排序(8)

408答疑 文章目录 一、排序的基本概念二、插入排序三、交换排序四、选择排序五、归并排序、基数排序和计数排序六、排序的代码实操七、各种内部排序算法的比较及应用八、外部排序九、参考资料鲍鱼科技课件26王道考研书 十、总结基本排序算法希尔排序快速排序、堆排序和归并排序…...

KUKA机器人导入设备说明文件

KUKA机器人在应用中需要进行通讯配置&#xff0c;通讯前需要导入设备说明文件&#xff0c;比如常用的倍福设备说明文件。在Workvisual软件上通过以下步骤即可导入设备说明文件。 一、打开Workvisual软件&#xff0c;在选项卡【File】下找到【Import/Export】输入/输出并点击打…...

ssl.SSLCertVerificationError报错解决方案

这个错误 ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate 指出 Python 在尝试建立安全的 HTTPS 连接时&#xff0c;无法验证远程服务器&#xff08;在此案例中是 GitHub 或 Hugging Face…...

drawio导出流程图为白色背景png图片

draw.io 操作路径&#xff1a; 1.纯白背景图片&#xff08;一般导出流程图就这种纯白背景&#xff0c;看自己需求 什么都不勾选 导出效果图 2.田字格白背景 只勾选网格 导出效果图 3.方块背景 只勾选背景 导出效果图 4.大方块背景 都勾选 导出效果图...

【Linux】——手撕线程池、简易线程池

前言 在现代计算机编程领域&#xff0c;随着多核处理器和分布式系统的广泛应用&#xff0c;并发编程变得越来越重要。而线程作为实现并发的基本手段之一&#xff0c;其重要性不言而喻。然而&#xff0c;在实际的应用开发中&#xff0c;如何高效地管理和调度线程&#xff0c;以充…...

使用mcp自定义编写mcp tool,使用 conda 启动,在cline中配置使用

自定义 mcp tool 例子 ## /langchain_learn/mcp学习/base_mcp_tool_study2.py # 导入必要模块 import os from typing import Optional from mcp.server.fastmcp import FastMCP# 初始化 MCP 服务器实例&#xff0c;指定服务器名称和版本 mcp_server FastMCP(name"DemoS…...