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

【C++】类和对象(4)

目录

1. 类型转换

非explicit的单参数构造函数

示例 

explicit的单参数构造函数

示例

不同版本的行为 

示例 (单参数)

示例(多参数且其余参数有默认值 )

 示例(多参数且无默认值)

2. static成员变量

例题1

例题2 

3. 友元

4. 内部类

例题

5. 匿名对象

示例 


1. 类型转换

C++支持将内置类型隐式转换为类类型对象,需要非explicit的单参数构造函数或者多参数但其余参数有默认值的构造函数

非explicit的单参数构造函数

示例 

假设定义一个 Length  类来表示长度,单位是米,它有一个接受 int  类型参数的构造函数用于设置长度数值:

#include <iostream>
using namespace std;class Length {
public:// 接受int类型参数的构造函数Length(int meter) : length(meter){}void show() const {cout << "长度为: " << length << " 米" << endl;}
private:int length;
};int main() { // 复制初始化,将int类型的5转换为Length类型的对象lenLength len = 5; //想要创建一个表示长度为5米的length对象len len.show();return 0;
}

这里 int  类型的 5  可以通过 Length  类的构造函数隐式转换为 Length  类型的对象,使用 Length len = 5;  这种复制初始化的方式,代码看起来就像是把一个整数值赋给了 Length  类型的对象,比较符合常规的赋值思维习惯,简单易懂。相比之下,直接初始化 Length len(5);  虽然功能一样,但复制初始化在这种类型转换很自然的场景里,从写法上会给人一种更直观的感觉。

explicit的单参数构造函数

示例

如果构造函数被声明为explicit ,就不再支持隐式类型转换,仅允许直接初始化

#include <iostream>
using namespace std;class MyClass 
{
public:    explicit MyClass(int value) // explicit 修饰构造函数,禁止隐式转换: data(value) {}   
private:int data;
};int main() 
{MyClass obj(10);// 正确,显式调用构造函数   // MyClass obj = 20; 错误! 因为 MyClass 的构造函数是 explicit,禁止隐式转换return 0;
}

不同版本的行为 

  • C++98/03Length len = 5; 复制初始化的处理方式是:先使用5调用构造函数 Length(int meter) 生成一个临时的Length类型的对象,然后再通过拷贝构造函数将临时对象复制到 len。允许编译器优化省略。
  • C++11优化为直接构造。编译器必须省略临时对象和拷贝构造函数的调用,Length len = 5; 编译器会直接调用构造函数初始化 len,提高了程序效率。

示例 (单参数)

class MyClass
{
public:MyClass(int value) // 非 explicit,允许隐式转换: data(value){} // 无拷贝构造函数(编译器会默认生成)
private:int data;
};void func(MyClass obj)
{/* ... */
}int main()
{MyClass obj = 10;  // 隐式转换:int → MyClass//C++98/03行为:先调用构造函数生成临时的MyClass类型对象,再通过拷贝构造函数(若用户未定义,编译器默认生成一个公有的)将临时对象赋值给obj(这里临时对象生命周期仅用于初始化obj,拷贝完成后销毁)//C++11及以后行为:允许直接构造obj而不生成临时对象,不调用拷贝构造函数func(20);   // 隐式转换:int → MyClass//C++98/03行为:(两次开销)先生成临时的MyClass类型对象,再通过拷贝构造(若用户未定义,编译器默认生成一个公有的)函数将临时对象传递给func函数的形参obj//C++11及以后行为:(一次开销)允许直接在函数func的形参obj的存储位置(函数栈帧)构造MyClass对象,而不生成临时对象return 0;
}
class MyClass
{
public:MyClass(int value) // 非 explicit,允许隐式转换: data(value){}// 无拷贝构造函数(编译器会默认生成)
private:int data;
};void func(const MyClass& a)//参数为引用类型
{/* ... */
}int main()
{MyClass obj = 10;  func(20);  //不管是C++98/03还是C++11及以后,当参数是引用类型时,必须创建临时对象,然后绑定到引用上,临时对象生命周期延长至函数结束return 0;
}

示例(多参数且其余参数有默认值 )

#include <iostream>
using namespace std;
class A 
{
public:// 多参数但其余参数有默认值的构造函数A(int a, int b = 4) : value(a + b) {cout << value << endl;}private:int value;
};int main() 
{        A obj2 = 10;  //这里 10 是int类型,隐式转换为A类型,调用多参数(有默认值)构造函数return 0;
}

 示例(多参数且无默认值)

#include <iostream>
using namespace std;
class B
{
public:// 多参数且无默认值的构造函数B(int a, int b) : num(a + b) {cout << num << endl;}private:int num;
};int main() 
{// 不能隐式转换,显式调用构造函数进行类型转换B obj = B(3, 5);//理论上B(3, 5)复制初始化 先调用构造函数创建临时对象,再调用拷贝构造函数将临时对象赋值给obj,实际上进行了优化//不产生临时对象,也不调用拷贝构造函数,等价于直接初始化 B obj(3,5),二者在效果和性能上完全一致return 0;
}
#include <iostream>
using namespace std;
class Point 
{
public:Point(int x, int y) : m_x(x), m_y(y) {}void print() const {std::cout << "(" << m_x << ", " << m_y << ")";}private:int m_x;int m_y;
};void displayPoint(const Point& p)
{p.print();std::cout << std::endl;
}int main() 
{// 1.显式构造Point对象后传递displayPoint(Point(10, 20));//Point(10, 20)调用构造函数创建临时对象,这个临时对象直接绑定到函数的参数p上// 2.使用列表初始化语法,编译器隐式调用构造函数displayPoint({ 30, 40 });//编译器看到这种形式,知道接受一个Point类型引用参数,Point类有构造函数,此时编译器会隐式地使用{10,20}作为参数调用构造函数,创建临时对象//3.直接初始化然后再传Point p(5, 5);displayPoint(p);return 0;
}

2. static成员变量

  • 用static修饰的成员变量,称之为静态成员变量,静态成员变量必须在在类外进行初始化。
  • 所有对象共享同一份静态成员变量,它存储在全局数据区,而不是在每个对象的内存空间中。
  • 用static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针
  • 静态成员函数中可以访问其他的静态成员,但是不能访问非静态成员,因为没有this指针。
  • 非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
  • 突破类域就可以访问静态成员,可以通过类名::静态成员或者对象.静态成员来访问静态成员变量和静态成员函数。
  • 静态成员也是类的成员,受public、protected、private访问限定符的限制。
  • 静态成员变量不能在声明位置给缺省值初始化,因为缺省值是给构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。

示例: 

//实现一个类,计算程序中创建出了多少个类对象?
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}~A(){--_scount;}  //静态成员函数static int GetACount(){//_a++; error! 静态成员函数不能访问非静态成员,因为没有this指针return _scount;}void func(){cout << _scount << endl;cout << GetACount() << endl;}
private:int _a = 4;//类里面声明static int _scount;
};//类外⾯初始化
int A::_scount = 0;int main()
{cout << A::GetACount() << endl;A a1, a2;A a3(a1);cout << A::GetACount() << endl;cout << a1.GetACount() << endl;//cout << A::_scount << endl;  编译报错:error C2248 : “A::_scount” : ⽆法访问private成员(在“A”类中声明) 受访问限定符限制!return 0;
}

例题1

 链接[ 求1+2+3+……n]

class Sum
{
public:Sum(){_ret+=_i;++_i;}static int Getret(){return _ret;}
private:static int _i;static int _ret;};int Sum:: _i=1;int Sum:: _ret=0;class Solution {
public:int Sum_Solution(int n) {// Sum a[n]; 变长数组Sum*p=new Sum[n];return Sum::Getret();}
};

例题2 

设已经有A,B,C,D 4个类的定义,程序中A,B,C,D构造函数调用顺序为(C->A->B->D

设已经有A,B,C,D 4个类的定义,程序中A,B,C,D析构函数调用顺序为(B->A->D->C

C c;
int main()
{A a;B b;static D d;return 0;
}

解析:

变量c是全局对象,其构造函数最先调用;在main函数中先声明A a; 然后声明B b; 所以A的构造函数先于B调用;D d;是静态局部对象,其构造函数在main函数首次执行到该声明处调用,在A和B之后。所以顺序为:C->A->B->D

非静态局部对象a、b 析构时机是离开main函数作用域时,顺序为构造的反序(B->A);静态对象(全局c和静态局部d)析构时机是程序结束时,顺序为构造的反序(全局C先构造,静态局部D后构造,故析构顺序为D->C)。所以顺序为B->A->D->C

3. 友元

一般来说,类的私有成员外部是不能访问的,而友元函数在一些特殊场景下很有用,比如需要在类外部的函数中访问类的私有数据进行特定操作,又不想把这些数据设为公有成员破坏封装性,就可以将该函数声明为友元函数。

  • 友元提供了一种突破类访问限定符封装的方式,友元分为:友元函数和友元类,在函数声明或者类声明的前面加 friend,并且把友元声明放到一个类的里面。
  • 外部友元函数可访问类的私有和保护成员,友元函数仅仅是一种声明,他不是类的成员函数。
  • 友元函数不属于类的成员函数,没有 this  指针。调用时和普通函数一样,直接使用函数名调用。
  • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制。
  • 友元类的关系是单向的,不具有交换性,比如A类是B类的友元,但是B类不是A类的友元。
  • 友元类关系不能传递,如果A是B的友元,B是C的友元,但是A不是C的友元。
  • 一个函数可以是多个类的友元函数。
  • 友元提供了便利,但是友元会增加耦合度,破坏了类的封装性,所以友元不宜多用,使用时要谨慎。
#include<iostream>
using namespace std;class B; //前置声明,否则编译器在A类中编译时会因为不知道B是什么类型而报错,告诉编译器B是一个类
class A
{//友元声明
friend void func(const A& aa, const B& bb);
private:int _a1 = 1;int _a2 = 2;
};class B
{
//友元声明
friend void func(const A& aa, const B& bb);
private:int _b1 = 3;int _b2 = 4;
};void func(const A& aa, const B& bb)//func函数可以是多个类的友元函数
{cout << aa._a1 << endl;cout << bb._b1 << endl;
}int main()
{A aa;B bb;func(aa, bb);return 0;
}

当一个类被声明为另一个类的友元类时,那么这个类的所有成员函数都可以访问另一个类的私有和保护成员,无需为每个成员函数单独声明friend关键字。 

#include<iostream>
using namespace std;class A
{//友元声明
friend class B;// B整体是A的友元类,友元类的声明是对整个类的授权,B类的所有成员函数都可访问A的私有成员private:int _a1 = 1;int _a2 = 2;
};class B
{
public:void func1(const A& aa){cout << aa._a1 << endl;cout << _b1 << endl;}void func2(const A& aa){cout << aa._a2 << endl;cout << _b2 << endl;}private:int _b1 = 3;int _b2 = 4;
};int main()
{A aa;B bb;bb.func1(aa);bb.func2(aa);return 0;
}

4. 内部类

如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,跟定义在 全局相比,它只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类内部类默认是外部类的友元类。

#include<iostream>
using namespace std;class A
{
private:static int _k;int _h = 1;
public:class B  //B默认就是A的友元{public:void foo(const A& a){cout << _k << endl;          cout << a._h << endl;        }private:int _b = 1;};
};int A::_k = 1; //初始化静态成员变量int main()
{cout << sizeof(A) << endl; //4 非静态成员_hA::B b;//B类的作用域在A类内部,在外部使用B类时需要指定其所属的外部类域A aa;b.foo(aa);return 0;
}

内部类本质也是一种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使用,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其他地方都用不了。 

例题

 链接[ 求1+2+3+……n] 

class Solution 
{
private:static int _i;static int _ret;class Sum //内部类{public:Sum(){_ret+=_i;++_i;}         };public:int Sum_Solution(int n) {Sum a[n];//变长数组// Sum*p=new Sum[n];// delete []p;return _ret;}};int Solution:: _i=1;int Solution:: _ret=0;

5. 匿名对象

类型 (实参)定义出来的对象叫做匿名对象,相比之前定义的类型 对象名(实参)定义出来的叫有名对象

匿名对象通常是临时对象,它们在表达式结束后会被自动销毁

示例 

#include<iostream>
using namespace std;class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}
private:int _a;
};class Solution
{
public:int Sum_Solution(int n) {//...return n;}
};int main()
{//有名对象//A aa1(); 不能这么定义对象,因为编译器无法识别这是是⼀个函数声明,还是对象定义  A aa1;cout << endl;A aa2(2);cout << endl;  //匿名对象,匿名对象的特点不⽤取名字,但是它的⽣命周期只有这一行,我们可以看到下一行他就会自动调用析构函数A();cout << endl;A(1);cout << endl;//匿名对象在这样场景下就很好⽤:/*Solution sl;cout << sl.Sum_Solution(10) << endl;*///为了更方便cout << Solution().Sum_Solution(10) << endl;return 0;
}

运行结果:

相关文章:

【C++】类和对象(4)

目录 1. 类型转换 非explicit的单参数构造函数 示例 explicit的单参数构造函数 示例 不同版本的行为 示例 &#xff08;单参数&#xff09; 示例&#xff08;多参数且其余参数有默认值 &#xff09; 示例&#xff08;多参数且无默认值&#xff09; 2. static成员变量…...

微信jdk 前端vue获取流程1、

参考链接&#xff1a; 企业微信的JSSDK,调用及使用方法_企业微信jssdk-CSDN博客 1、引用 <script src"//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script src"https://res.wx.qq.com/open/js/jweixin-1.2.0.js" referrerpolic…...

Linux进程7-signal信号处理方式验证、可重入函数举例、信号集函数验证、信号集阻塞验证

目录 1. signal函数 1.1进程接收到信号后的处理方式 1.2 signal 函数 1.2.1 signal 函数默认处理 1.2.2 signal 函数忽略处理 1.2.3 signal 函数自定义处理 1.2.4 signal 函数返回值 2.可重入函数 2.1如何判断函数是否可重入 2.2自定义信号处理函数举例 2.2.1 sle…...

使用Python在excel里创建柱状图

一、前言 通过使用Python的openpyxl库&#xff0c;在excel里创建柱状图。openpyxl库提供了创建Excel图表的功能&#xff0c;包括柱状图(Bar Chart)。 二、程序展示 1、导入相关模块&#xff0c;新建excel 新建excel后&#xff0c;在excel的第一列创建一些数据。 import op…...

计算机视觉进化论:YOLOv12、YOLOv11与Darknet系YOLOv7的微调实战对比

摘要 YOLO系列作为实时目标检测领域的重要里程碑&#xff0c;持续引领速度与精度的平衡发展。本文围绕YOLOv7&#xff08;基于Darknet框架&#xff09;、YOLOv11及YOLOv12&#xff0c;系统、深入地对比了三款模型的架构创新、微调策略、核心技术及应用场景。我们详细解析了三者…...

湖北理元理律师事务所:债务管理领域的平台化创新探索

随着中国居民负债率攀升至62%&#xff08;央行2023年数据&#xff09;&#xff0c;债务管理从个体需求演变为社会性课题。湖北理元理律师事务所通过“法律科技金融”的融合模式&#xff0c;构建了国内首个全链条债务管理平台&#xff0c;其服务逻辑与行业价值值得深度剖析。 平…...

沐曦玩转 LMDeploy、XTuner 和 InternLM3

学习链接&#xff1a; https://aicarrier.feishu.cn/wiki/O84LwkiBriUU0NkDwurcSufhnVb 一 LMDeploy推理及验证 1.1 下载LMDeploy # 安装addict软件包 pip install addict mmengine mmengine-lite fire accelerate0.32.1 nvidia-ml-py# 解决LMDeploy对tranformers版本要求的…...

【Java面试笔记:进阶】26.如何监控和诊断JVM堆内和堆外内存使用?

监控和诊断JVM内存使用是优化性能和解决内存问题的关键。 1.JVM内存监控与诊断方法 1.图形化工具 JConsole:提供图形化界面,可直接连接到Java进程,查看内存使用情况。VisualVM:功能强大的图形化工具,但注意从Oracle JDK 9开始不再包含在JDK安装包中。Java Mission Contr…...

阿里云服务器云盘扩容

在阿里云服务器上在线扩容了云盘后&#xff0c;如果服务器内部查看容量没有变化&#xff0c;可能是由于分区和文件系统未正确扩展。以下是详细的解决步骤&#xff1a; 1. 确认扩容是否成功 在阿里云控制台检查磁盘容量是否已显示扩容后的新大小。如果控制台显示已扩容&#x…...

【ESP32】st7735s + LVGL移植

LVGL的移植 使用版本1、创建工程2、开始移植2.1、文件准备2.2、修改代码2.3、SDK配置编辑器 3、测试 使用版本 LVGL版本&#xff1a;8.3 链接点这里ESPIDF版本&#xff1a;4.4.8lvgl_esp32_drivers&#xff1a; 链接点这里ESP32型号&#xff1a;ESP32S3 1、创建工程 默认都会…...

Jackson 使用方法详解

Jackson 是 Java 生态中最流行的 JSON 处理库&#xff0c;也是 Spring Boot 的默认 JSON 解析器。它提供了高性能的 JSON 序列化&#xff08;对象 → JSON&#xff09;和反序列化&#xff08;JSON → 对象&#xff09;功能。以下是 Jackson 的全面使用指南。 1. 基础依赖 Mave…...

TensorFlow深度学习框架:从入门到精通的完整指南

&#x1f31f; TensorFlow核心优势 TensorFlow作为Google开发的顶级深度学习框架&#xff0c;具有三大独特优势&#xff1a; 工业级部署能力&#xff1a;支持从移动端到服务器的全平台部署完善的工具链&#xff1a;包含TensorBoard、TF Lite、TF.js等完整生态强大的社区支持&…...

Java 入门宝典--注释、关键字、数据类型、变量常量、类型转换

作者&#xff1a;IvanCodes 发布时间&#xff1a;2025年4月28日&#x1f423; 专栏&#xff1a;Java教程 哈喽&#xff0c;各位 CSDN 的小伙伴们&#xff01;&#x1f44b; 这部分内容虽然基础&#xff0c;但 极其重要&#xff0c;是后续学习所有高级特性的基石。准备好了吗&…...

【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的旅游论坛系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 …...

Android开发,实现一个简约又好看的登录页

文章目录 1. 编写布局文件2.设计要点说明3. 效果图4. 关于作者其它项目视频教程介绍 1. 编写布局文件 编写activity.login.xml 布局文件 <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android…...

一种改进的YOLOv11网络,用于无人机视角下的小目标检测

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 随着无人机&#xff08;UAV&#xff09;和计算机视觉技术的快速发展&#xff0c;从无人机视角进行目标检测已成为一个重要的研究领域。然而&#xff0c;无人机图像中目标像素占比极小、物体尺度变…...

linux离线安装zsh

下载zsh 下载仓库后解压 下载地址&#xff1a;https://github.com/zsh-users/zsh 离线安装 安装方法见INSTALL文件 ./configure --prefix[/usr/local] make make install...

Golang|使用函数作为参数和使用接口的联系

函数作为数据类型的一种&#xff0c;可以成为其他函数的参数。在 Go&#xff08;Golang&#xff09; 中&#xff0c;函数作为参数 和 接口&#xff08;interface&#xff09;&#xff0c;本质上都和抽象、灵活调用有关 —— 都是让代码更灵活、更可扩展的手段。不过它们各有侧重…...

Python爬虫实战:获取软科网最新特定专业大学排名数据并做分析,为高考填报志愿做参考

一、引言 在高考升学的重要阶段,志愿填报成为考生和家长关注的核心问题。准确、全面且具有权威性的大学专业排名数据,是考生做出科学志愿决策的关键依据。软科网作为专业的大学排名信息发布平台,其发布的计算机科学与技术专业排名数据,因具有较高的公信力和参考价值,备受…...

【ACL系列论文写作指北12-Deadline管理与科研项目规划】-用节奏赢得高质量科研

科研不是一场冲刺&#xff0c;而是有序推进的系统工程。 引言&#xff1a;掌控时间&#xff0c;才能掌控科研主动权 再好的想法和技术&#xff0c;如果没有良好的时间管理&#xff0c;最终只会沦为“赶DDL”的牺牲品。科研项目规划&#xff0c;是确保质量、效率与心态平衡的关…...

elasticsearch底层模块解析与实践系列

#作者&#xff1a;猎人 文章目录 底层模块深入解析之threadpool1、线程池2、线程池类型3、cpu core数量设置 底层模块深入解析之plugin底层模块深入解析之es node节点角色1、node类型2、master eligible node3、data node4、ingest node5、cooridnating only node6、node data…...

Git-基本操作

前言 安装 git --version sudo apt-get remove git -y #卸载 sudo apt-get install git -y基本操作 创建本地仓库 mkdir gitcodegit init 这个就可以创建本地仓库了 然后当前目录下就有一个.git的文件夹 配置本地仓库 就是配置用户的名称&#xff0c;和用户的email地址 在…...

iVX 图形化编程如何改写后端开发新范式

在数字化转型加速推进的当下&#xff0c;企业对后端系统的需求呈现爆发式增长。Gartner 最新报告指出&#xff0c;2025 年全球企业平均需完成 300 定制化应用开发&#xff0c;而传统编码模式下&#xff0c;单个项目平均交付周期长达 6 - 8 个月。与此同时&#xff0c;Redis、K…...

【数据可视化-42】杂货库存数据集可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

使用 Electron 打包 Windows 可执行程序

使用 Electron 打包 Windows 可执行程序 在使用 Electron 构建桌面应用程序时&#xff0c;通常需要将项目打包为可执行文件&#xff08;例如 .exe 文件&#xff09;&#xff0c;以便用户可以方便地安装和运行。本文将介绍如何使用 electron-builder 将 Electron 项目打包成 Wi…...

爬虫学习笔记(三)--Http协议

思维导图 上面思维导图提取的原文是2026王道计网P286~290 URL最前面&#xff08;URL传输过程中遵循HTTP协议&#xff09; 协议 计算机传输的数据实际上就是二进制0和1&#xff0c;协议就是规定这一串二进制数字的前几位代表什么、中间几位代表什么、后几位代表什么 HTTP&a…...

ai环境cuda cudnn conda torch整体迁移 wsl docker

运行没问题的环境&#xff0c;wsl先关停wsl --shutdown 然后导出复制到迁移机器上wsl --export U24 E:\wsl\u24.tar 使用wsl版挂成虚拟机wsl --import U24 E:\wsl\ubuntu E:\wsl\u24.tar 使用docker版挂成镜像docker import E:\wsl\u24.tar my-ubuntu:custom 启动docker容器&am…...

数据库小技巧-使用开窗函数矫正数据库指定列部分列值重复的数据

需求描述 目前有某表的某列部分值重复&#xff0c;需要批量矫正该列数据&#xff0c;确保该列分组内不会出现重复值。 解决思路 -- 创建个临时表 create table t_tmp_20250428( c_bh varchar(32), -- 主键 c_bh_aj varchar(32), -- 主表外键&#xff0c;分组条件&#xff0c…...

【优选算法 | 二分查找】二分查找算法解析:如何通过二段性优化搜索效率

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口 在本篇文章中&#xff0c;我们将深入解析二分查找算法的核心原理。从基本概念到实际应用&#xff0c;带你了解如何利用二分查找高效定位元素&#xff0c;提升搜索效率。无论你是刚接触算法的新手…...

AI与IT协同的典型案例

简介 本篇代码示例展示了IT从业者如何与AI协同工作&#xff0c;发挥各自优势。这些案例均来自2025年的最新企业实践&#xff0c;涵盖了不同IT岗位的应用场景。 一、GitHub Copilot生成代码框架 开发工程师AI协作示例&#xff1a;利用GitHub Copilot生成代码框架&#xff0c;…...

5.软考高项(信息系统项目管理师)-成本管理

成本管理非常重要&#xff0c;选择、计算考得非常多&#xff0c;必须要好好学。 过程、输入、工具及输出 过程名&#xff08;附作用&#xff09; 通俗解释 输入 工具和技术 输出 规划成本管理 为如何管理项目成本提供指南和方向 编制成本管理计划&#xff0c;这个计划主…...

前端:纯HTML、CSS和JS菜单样式

实现了一个多级折叠菜单系统,使用纯HTML、CSS和JavaScript(无任何框架) 一、二级菜单展开 1、实现效果 初始状态-展示全部一级菜单 选中共状态,一级标题选中共为蓝色背景色,二级标题选中共为蓝色文字,展开右侧图标为-,后缩状态右侧图标为+ 2、实现 ​​HTML结构​​ …...

案例篇:如何用tcpdump和Wireshark识别潜在威胁

无论是日常浏览网页、观看视频&#xff0c;还是企业开展线上业务、进行数据传输&#xff0c;都离不开网络的支持。然而&#xff0c;网络问题也时有发生&#xff0c;比如网络卡顿&#xff0c;相信大家都遇到过&#xff0c;那种等待页面加载的焦急心情&#xff0c;真的让人抓狂。…...

微信小程序开发中关于首屏加载、本地数据持久化的思考

本文将围绕小程序开发中首屏性能优化与本地存储持久化两大重要主题展开&#xff0c;结合实际项目经验&#xff0c;系统分析常见问题、优化方法与最佳实践&#xff0c;构建流畅且高效的小程序体验。 文章目录 前言一、什么是首屏加载&#xff1f;为什么重要&#xff1f;二、小程…...

媒资管理之视频管理

一&#xff1a;业务概述&#xff1a; 媒资管理这个模块是我负责开发的&#xff0c;主要的管理对象是视频&#xff0c;图片&#xff0c;文档等 包括文件的上传&#xff0c;视频的处理&#xff0c;文件的删除 &#xff08;在媒资管理界面&#xff0c;有个上传视频的按钮&#…...

windows程序转鲲鹏服务器踩坑记【持续更新中】

1.鲲鹏处理器和Intel处理器的区别 处理器/对比项IntelKunpeng厂家因特尔(美国)华为(中国)指令集X86架构ARM-V8架构与指令集- x86 CISC复杂指令集 - 单核性能强&#xff08;如至强8380主频3.8GHz&#xff09; - 三级缓存优化&#xff0c;支持DDR4-3200和Optane内存- ARMv8-A RI…...

【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界

习题集: 【单选题】在构建Agent系统时,使用Assistant API创建Agent时,若想让Agent具备查询员工信息和发送请假申请的功能,以下对instructions参数设置最合理的是( ) A. “你可以做任何事情” B. “你能查询员工信息和发送请假申请” C. “你是公司助手,功能有:1.查询员…...

程序进程多任务线程

1.程序 程序(program)是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 2.进程 进程(process)是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。进程是操作系统资源分配和处理器调度的基本单位,拥有独立的代码、内部数…...

Finish技术生态计划: FinishRpc

finishRpc 简介 ​ 纯个人兴趣设计的项目: 因为失业在家摆烂 所以没事就想写点代码 本身也比较喜欢自己写一些好玩的demo 这个项目的设计完全是取悦自己又菜又有一个创造框架的梦想 可以用于提升框架设计思路以及实践一些常用技术的练习 可以用于校园中的练习 , 如果能对你有所…...

《商业世界的开源法则:协议选择与商业模式创新》

引言 在当今数字化时代&#xff0c;开源软件已成为技术生态系统中不可或缺的一部分。从Linux操作系统到Apache Web服务器&#xff0c;从MySQL数据库到React前端框架&#xff0c;开源项目支撑着全球大部分互联网基础设施和企业IT系统。然而&#xff0c;关于开源协议与商业使用之…...

Kubernetes》》k8s》》explain查 yaml 参数

在创建json 和yaml 时&#xff0c;我们可能不知道具体的参数该怎么写。同样 我们可以通过explain这个 命令来查看 每个参数具体的作用与写法 # 查看 pod类性有哪些参数 kubectl explain pod# 查看pod中 spec下面有哪些参数 kubectl explain pod.spec...

Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master

前文已经使用docker安装了kubeadm&#xff0c;因此本文使用kubeadm部署master节点。 一.先拉取必要的镜像库到本地。 在拉取之前&#xff0c;先配下镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": [&qu…...

《数据结构之美--二叉树》

一&#xff1a;引言&#xff1a; 上次我们学习了栈和队列这两个数据结构&#xff0c;今天我们来学习一个新的数据结构–二叉树中的堆。 堆其实就是一种特殊的二叉树&#xff0c;具有二叉树的性质的同时&#xff0c;还具有其他的性质。 那么在学习堆之前还是先来了解一下树。 …...

Prompt Engineering 提示工程:释放大语言模型潜力的关键技术与实践指南

提示工程:释放大语言模型潜力的关键技术与实践指南 提示工程(Prompt Engineering)作为与大型语言模型(LLM)交互的核心技术,已成为AI应用开发的关键技能。本文将系统介绍提示工程的定义与发展历程,深入剖析其核心知识点,提供实用的设计框架与技巧,并通过丰富的实战案例展示…...

std::print 和 std::println

一、基本概念 std::print 和 std::println 是 C23 新增的格式化输出函数&#xff0c;旨在替代传统的 std::cout 链式调用。它们基于 std::format 实现&#xff0c;支持类型安全的格式化字符串&#xff0c;语法更简洁&#xff0c;性能更优15。 功能特点&#xff1a; 直接输出到…...

高压直流输电MATLAB/simulink仿真模型+说明文档

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2018Ra&#xff09;软件。建议采用matlab2018 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 使用一个传输功率为1000MW&#xff08;500 kV&#xff0c;2 kA&#xff09;直流互连…...

第十四章-PHP与HTTP协议

第十四章-PHP与HTTP协议 一&#xff0c;HTTP 协议详解 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的协议之一&#xff0c;用于客户端&#xff08;如浏览器&#xff09;与服务器之间的通信。它是 Web 技术的基石…...

【阿里云大模型高级工程师ACP学习笔记】2.6.用插件扩展答疑机器人的能力边界

一、学习目标 备考阿里云大模型高级工程师ACP认证,深入学习《2.6.用插件扩展答疑机器人的能力边界》这部分内容,主要期望达成以下目标: 理解智能体应用核心概念:理解智能体(Agent)应用的核心概念,包括其如何拓展大模型能力,突破传统答疑机器人局限。掌握构建Agent系统…...

用远程代理模式轻松实现远程服务调用,打开编程新大门

通过远程代理来实现一个简易的远程过程调用实例。带你打开新的大门。 Socket 远程代理服务案例 基于 Socket 的远程服务&#xff0c;我们需要完成以下步骤&#xff1a; 服务端实现&#xff1a;创建一个远程服务&#xff0c;通过 Socket 接受客户端请求并提供计算服务。 客户端…...

(001)Excel 快捷键

文章目录 时间 时间 当前日期&#xff1a;ctrl ; (分号)。当前时间&#xff1a;ctrl Shift ; (分号)。...