C++笔记
C++知识笔记
一、C++概述
C++是一种通用编程语言,它在C语言的基础上扩展而来,支持面向对象编程、泛型编程和过程化编程等多种编程范式。C++具有高效、灵活、接近硬件等特点,广泛应用于系统软件、应用软件、嵌入式系统、游戏开发等领域。其强大的性能和丰富的功能使得它在软件开发中占据着重要地位。
(一)C++的发展历程
C++最初由贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)在20世纪80年代初设计并实现,最初被称为"C with Classes",即带有类的C语言。随着时间的推移,C++不断发展,引入了虚函数、运算符重载、模板等重要特性,逐渐形成了完整的面向对象编程体系。1998年,C++标准(C++98)正式发布,之后又陆续发布了C++03、C++11、C++14、C++17、C++20等标准,不断完善语言特性和库功能,使C++更加适应现代软件开发的需求。
(二)C++的特点
- 面向对象编程(OOP):C++支持封装、继承、多态等面向对象的核心概念,能够将数据和操作数据的函数封装成类,通过继承实现代码的复用,利用多态实现灵活的动态绑定,提高软件的可维护性和可扩展性。
- 泛型编程:模板是C++泛型编程的核心机制,通过模板可以编写通用的算法和数据结构,使其能够适用于不同的数据类型,提高代码的复用性和灵活性。
- 与C语言的兼容性:C++完全兼容C语言,这意味着C语言的代码可以在C++环境中编译运行,同时C++也可以调用C语言的库函数,使得开发者可以在C语言的基础上逐步过渡到C++编程,充分利用已有的C语言资源。
- 高效性:C++具有接近汇编语言的执行效率,能够直接操作硬件资源,对于对性能要求较高的应用场景,如实时系统、高性能计算等,C++是首选的编程语言之一。
二、C++编译器
(一)编译器的工作流程
C++编译器将源代码转换为可执行程序的过程通常包括以下几个阶段:
1. 预处理(Preprocessing)
预处理阶段是编译器的第一个阶段,主要处理以"#"开头的预处理指令,如#include、#define、#ifdef等。
- 头文件包含(#include):将指定的头文件内容插入到当前源文件中。例如,#include 会将iostream头文件的内容替换到该指令的位置。
- 宏定义(#define):将代码中的宏标识符替换为对应的宏体。例如,#define PI 3.14159 会在预处理阶段将代码中所有的PI替换为3.14159。
- 条件编译(#ifdef、#else、#endif等):根据定义的宏或条件表达式,决定是否编译某部分代码。这在跨平台开发或调试代码时非常有用,可以根据不同的编译环境选择不同的代码分支。
预处理完成后,会生成一个经过处理的中间文件,通常称为预处理后的源文件。
2. 编译(Compilation)
编译阶段将预处理后的源文件转换为汇编语言代码。编译器对源代码进行语法分析、语义分析和中间代码生成等操作,检查代码中的语法错误和语义错误。如果代码存在错误,编译器会给出相应的错误提示和警告信息。在这个阶段,编译器会将高级语言的语句转换为与目标架构相关的汇编语言指令。
3. 汇编(Assembly)
汇编阶段将汇编语言代码转换为机器语言的目标文件(二进制文件)。汇编器(Assembler)将每条汇编指令转换为对应的机器码,生成以.obj(Windows)或.o(Linux)为扩展名的目标文件。目标文件中包含了机器码和符号表等信息,但此时还不能直接运行,因为目标文件可能引用了其他文件中的函数或变量。
4. 链接(Linking)
链接阶段将多个目标文件和库文件链接成一个可执行程序。链接器(Linker)处理目标文件中的外部符号引用,将各个目标文件中的代码和数据合并,并解析符号的地址,确保程序在运行时能够正确访问外部函数和变量。链接可以分为静态链接和动态链接两种方式:
- 静态链接:将库文件中的代码直接复制到可执行程序中,生成的可执行程序较大,但在运行时不需要依赖外部库文件。
- 动态链接:在可执行程序中只保留对库文件的引用,程序运行时动态加载所需的库文件,生成的可执行程序较小,节省磁盘空间,但需要在运行环境中存在相应的库文件。
(二)常见的C++编译器
- GCC(GNU Compiler Collection)
- 简介:GCC是GNU项目的核心组件之一,是一款功能强大、跨平台的编译器,支持多种编程语言,包括C、C++、Java、Fortran等。GCC在Linux和Unix系统中广泛使用,同时也可以在Windows系统上通过MinGW或Cygwin等工具链进行安装和使用。
- 特点:
- 支持最新的C++标准,包括C++11、C++14、C++17、C++20等,能够充分利用C++的新特性。
- 提供了丰富的编译选项,可以对代码进行优化、调试信息生成、警告级别设置等操作。
- 具有良好的可扩展性和兼容性,能够与其他工具和库良好集成。
- Clang
- 简介:Clang是一个基于LLVM(Low-Level Virtual Machine)的编译器前端,主要用于C、C++、Objective-C等语言的编译。Clang以其快速的编译速度、清晰的错误提示和良好的模块化设计而受到广泛关注。
- 特点:
- 编译速度快,在处理大型项目时能够显著提高编译效率。
- 错误提示信息更加友好和详细,能够帮助开发者更快地定位和解决问题。
- 支持与GCC兼容的编译选项,方便开发者从GCC迁移到Clang。
- Visual C++ Compiler(MSVC)
- 简介:MSVC是微软公司开发的C++编译器,集成在Visual Studio集成开发环境(IDE)中,主要用于Windows平台的软件开发。
- 特点:
- 与Windows操作系统和Visual Studio IDE深度集成,提供了强大的调试、性能分析等工具。
- 支持Windows特定的API和特性,如COM组件、MFC框架等。
- 对C++标准的支持逐渐完善,特别是在C++11及以后的标准支持上不断进步。
- Intel C++ Compiler(ICC)
- 简介:ICC是英特尔公司开发的C++编译器,主要针对英特尔处理器进行优化,能够生成高效的代码,提高程序在英特尔平台上的性能。
- 特点:
- 提供了针对英特尔处理器的特殊优化选项,如向量化指令、多线程优化等,能够充分发挥硬件性能。
- 支持与GCC和MSVC兼容的编译选项,方便开发者在不同平台上使用。
三、头文件
(一)头文件的作用
头文件在C++编程中起着重要的作用,主要包括以下几个方面:
- 声明函数和类:头文件中通常包含函数的声明、类的定义、结构体的定义等。其他源文件在使用这些函数或类时,只需要包含对应的头文件,就可以知道函数的参数类型、返回值类型以及类的成员函数和数据成员等信息,而不需要在每个源文件中重复声明。
- 定义宏和常量:头文件可以用于定义宏常量、宏函数等,通过#include指令将这些定义引入到多个源文件中,确保各个源文件中使用的宏和常量的一致性。
- 声明模板和命名空间:模板的定义通常需要放在头文件中,因为模板的实例化需要在编译时看到模板的完整定义。此外,命名空间的声明和定义也常常放在头文件中,以便在多个源文件中统一使用命名空间。
- 提供类型定义和extern声明:头文件可以使用typedef或using关键字为复杂的类型定义别名,方便代码的编写和阅读。同时,头文件中可以使用extern关键字声明全局变量,使这些变量能够在多个源文件中共享。
(二)如何使用头文件
- 包含标准头文件:C++标准库提供了大量的头文件,如iostream(输入输出流)、vector(动态数组)、string(字符串)等。包含标准头文件时,使用#include <头文件名>的形式,例如#include 。标准头文件通常位于编译器的安装目录下的include文件夹中,编译器会自动搜索这些头文件。
- 包含自定义头文件:如果开发者自己编写了头文件,需要使用#include "头文件名"的形式,例如#include “myheader.h”。此时,编译器会首先在当前源文件所在的目录中搜索头文件,如果找不到,再到标准头文件目录中搜索。
- 头文件的包含顺序:为了避免头文件之间的依赖问题和编译错误,头文件的包含顺序通常遵循一定的规则。一般来说,应该先包含标准头文件,再包含自定义头文件。对于自定义头文件,按照项目中的模块依赖关系,从最基础的头文件开始包含。
(三)头文件的内容
头文件中可以包含以下内容:
- 函数声明:声明函数的名称、参数列表和返回值类型,例如:
int add(int a, int b);
- 类定义:定义类的成员函数和数据成员,例如:
class MyClass { public:void myFunction(); private:int myVariable; };
- 结构体和联合体定义:定义结构体和联合体的类型,例如:
struct Student {char name[20];int age; };
- 枚举类型定义:定义枚举类型,例如:
enum Color { RED, GREEN, BLUE };
- 宏定义:使用#define指令定义宏,例如:
#define MAX_SIZE 100
- 模板定义:定义函数模板和类模板,例如:
template <typename T> T max(T a, T b) {return (a > b) ? a : b; }
- 命名空间声明和定义:声明和定义命名空间,例如:
namespace MyNamespace {int myVariable;void myFunction(); }
- extern变量声明:声明全局变量,例如:
extern int globalVariable;
(四)头文件保护(防止重复包含)
在C++编程中,头文件可能会被多个源文件包含,或者在同一个源文件中被多次包含,这会导致编译错误,如函数重复声明、类重复定义等。为了避免这种情况,需要使用头文件保护机制,确保头文件的内容在编译过程中只被处理一次。
1. 使用#ifndef、#define、#endif预处理指令
这是最常用的头文件保护方法,其原理是通过宏定义来判断头文件是否已经被包含过。具体步骤如下:
- 在头文件的开头,定义一个唯一的宏名称,通常使用头文件名的大写形式,并加上下划线或其他分隔符,例如:
#ifndef MYHEADER_H #define MYHEADER_H
- 在头文件的结尾,使用#endif指令结束条件编译,例如:
#endif // MYHEADER_H
这样,当第一次包含该头文件时,MYHEADER_H宏未被定义,预处理指令会执行中间的头文件内容,并定义MYHEADER_H宏。当再次包含该头文件时,由于MYHEADER_H宏已经被定义,预处理指令会跳过中间的头文件内容,从而避免重复包含。
2. 使用#pragma once指令
#pragma once是一种现代的头文件保护方法,它告诉编译器该头文件只需被包含一次。其使用方法非常简单,只需在头文件的开头添加#pragma once指令即可,例如:
#pragma once
// 头文件内容
#pragma once指令的优点是简单易用,不需要手动定义宏名称,避免了宏名称冲突的问题。但需要注意的是,#pragma once并不是C++标准的一部分,而是编译器的扩展功能,虽然大多数现代编译器都支持该指令,但为了确保代码的跨平台兼容性,通常建议同时使用#ifndef和#pragma once,或者根据项目的具体情况选择合适的头文件保护方法。
3. 头文件保护的重要性
头文件保护是C++编程中非常重要的一个环节,它可以避免因头文件重复包含而导致的编译错误,提高代码的可靠性和可维护性。特别是在大型项目中,头文件之间的依赖关系复杂,头文件保护机制能够有效地防止命名冲突和重复定义问题,确保项目的顺利编译和运行。
四、命名空间
(一)定义命名空间
命名空间是C++中用来解决命名冲突问题的一种机制,它将全局作用域划分为不同的命名空间,每个命名空间中的名称都是独立的,不会与其他命名空间中的名称发生冲突。
1. 命名空间的定义语法
namespace 命名空间名称 {// 命名空间内的声明和定义int variable;void function();class MyClass { /* ... */ };
}
命名空间名称可以是任意合法的标识符,通常使用具有描述性的名称,以便区分不同的命名空间。
2. 嵌套命名空间
命名空间可以嵌套定义,即在一个命名空间中定义另一个命名空间,例如:
namespace OuterNamespace {int outerVariable;void outerFunction();namespace InnerNamespace {int innerVariable;void innerFunction();}
}
嵌套命名空间的使用需要通过作用域解析运算符(::)来指定路径,例如OuterNamespace::InnerNamespace::innerVariable。
(二)使用命名空间中的成员
1. 直接使用作用域解析运算符
通过作用域解析运算符(::)可以直接访问命名空间中的成员,例如:
namespace MyNamespace {int myVariable = 10;void myFunction() { /* ... */ }
}int main() {// 访问命名空间中的变量int x = MyNamespace::myVariable;// 调用命名空间中的函数MyNamespace::myFunction();return 0;
}
2. 使用using指令
using指令可以将整个命名空间引入到当前作用域中,使得在当前作用域中可以直接使用命名空间中的成员,而不需要每次都指定命名空间名称,例如:
using namespace MyNamespace;int main() {int x = myVariable;myFunction();return 0;
}
需要注意的是,使用using namespace指令引入整个命名空间可能会导致命名冲突,如果当前作用域中已经存在与命名空间中同名的标识符,就会产生编译错误。
3. 使用using声明
using声明可以将命名空间中的某个特定成员引入到当前作用域中,例如:
using MyNamespace::myVariable;
using MyNamespace::myFunction;int main() {int x = myVariable;myFunction();return 0;
}
using声明比using namespace指令更加灵活和安全,它只引入需要使用的成员,避免了命名空间中其他成员可能带来的命名冲突问题。
(三)命名空间的作用
- 解决命名冲突:在大型项目中,不同的模块或库可能会定义相同名称的变量、函数或类,使用命名空间可以将这些名称封装在不同的命名空间中,避免全局作用域中的命名冲突。例如,标准库中的所有名称都定义在std命名空间中,当我们使用std::cout时,就不会与我们自己定义的cout名称发生冲突。
- 组织代码结构:命名空间可以将相关的类、函数和变量组织在一起,形成一个逻辑上的模块,使代码结构更加清晰,便于维护和管理。例如,在开发一个图形库时,可以将所有与图形绘制相关的类和函数定义在一个名为Graph的命名空间中,方便用户识别和使用。
- 支持库的开发和复用:库开发者可以使用命名空间来封装库的接口,避免与用户代码中的名称冲突,同时也方便用户根据需要选择引入库中的特定成员或整个命名空间。例如,第三方库通常会定义自己的命名空间,用户在使用时只需按照库的文档要求引入相应的命名空间或成员即可。
(四)标准命名空间std
C++标准库中的所有名称都定义在std命名空间中,例如cout、cin、endl、vector、string等。为了使用标准库中的成员,我们需要通过以下方式之一来引入std命名空间:
- 直接使用std::前缀:例如std::cout << “Hello, World!” << std::endl;
- 使用using namespace std:在文件开头添加using namespace std;,然后在代码中直接使用标准库成员,如cout << “Hello, World!” << endl;
- 使用using声明引入特定成员:例如using std::cout; using std::endl;,然后在代码中使用cout和endl。
需要注意的是,在大型项目中,使用using namespace std可能会引入大量的名称,增加命名冲突的风险,因此推荐使用using声明或直接使用std::前缀来访问标准库成员,以提高代码的可读性和安全性。
五、C++与办公工具及技能的关联思考(行业顾问视角)
(一)从C++开发工具看办公工具换代
在C++开发领域,集成开发环境(IDE)的发展体现了办公工具的不断换代。早期的C++开发可能依赖于简单的文本编辑器和命令行编译器,如Vi/Vim、Emacs搭配GCC,开发者需要手动编写Makefile来管理项目,效率较低。随着技术的进步,现代IDE如Visual Studio、CLion、Qt Creator等应运而生,它们集成了代码编辑、编译、调试、版本控制、项目管理等功能,提供了直观的图形界面和丰富的插件支持,大大提高了开发效率。
这类似于医药流通行业中办公工具的换代,从早期的纸质文档、Excel表格手动处理数据,到现在使用专业的企业资源计划(ERP)系统、供应链管理系统等,实现了数据的自动化处理和流程的规范化管理。开发工具的换代不仅提高了开发人员的工作效率,还降低了出错率,使项目管理更加便捷。
(二)C++编程技能对办公技能的重构启示
- 模块化思维:C++中通过头文件和命名空间将代码划分为不同的模块,实现了代码的封装和复用。在办公场景中,也可以运用模块化思维,将复杂的业务流程分解为多个独立的模块,每个模块负责特定的功能,如采购管理、库存管理、销售管理等,通过标准化的接口实现模块之间的交互,提高工作效率和系统的可维护性。
- 逻辑思维和问题解决能力:C++编程需要严谨的逻辑思维,开发者需要分析问题、设计算法、编写代码并调试解决错误。这种逻辑思维能力在办公场景中同样重要,例如在处理数据报表、制定工作计划、优化业务流程时,需要有条理地分析问题,找出关键因素,制定合理的解决方案。
- 学习新技能的能力:C++不断发展,新的标准和特性不断推出,开发者需要持续学习以跟上技术的步伐。在医药流通行业中,随着信息技术的发展,新的办公软件、管理系统和技术手段不断涌现,如大数据分析、人工智能在供应链中的应用等,员工需要具备学习新技能的能力,不断提升自己的办公技能,以适应行业的发展需求。
(三)C++在医药流通行业软件开发中的应用
作为医药流通行业的传统IT行业顾问,了解C++在行业软件开发中的应用至关重要。C++可以用于开发高性能的供应链管理系统,处理大量的库存数据、订单数据和物流数据,确保系统的高效运行和实时响应。在嵌入式设备开发中,如医药仓储中的智能货架、物流中的手持终端设备等,C++的高效性和对硬件的直接操作能力使其成为理想的选择。
同时,在开发行业专用的数据分析工具时,C++可以结合算法和数据结构,对海量的销售数据、库存数据进行快速处理和分析,为企业的决策提供有力支持。通过合理运用C++的特性和开发工具,能够提高软件开发的质量和效率,满足医药流通行业对信息化管理的需求。
总之,C++作为一种强大的编程语言,其知识体系不仅在软件开发领域具有重要意义,对于医药流通行业的办公工具换代和办公技能重构也具有一定的启示作用。通过借鉴C++中的模块化思维、逻辑思维和持续学习的理念,能够帮助企业更好地应对信息化时代的挑战,提升行业的竞争力。
上述笔记全面梳理了C++相关知识。你对内容的详略、结构安排等方面有什么看法或进一步需求,欢迎随时告知。
相关文章:
C++笔记
C知识笔记 一、C概述 C是一种通用编程语言,它在C语言的基础上扩展而来,支持面向对象编程、泛型编程和过程化编程等多种编程范式。C具有高效、灵活、接近硬件等特点,广泛应用于系统软件、应用软件、嵌入式系统、游戏开发等领域。其强大的性能…...
国产Linux统信安装mysql8教程步骤
系统环境 uname -a Linux FlencherHU-PC 6.12.9-amd64-desktop-rolling #23.01.01.18 SMP PREEMPT_DYNAMIC Fri Jan 10 18:29:31 CST 2025 x86_64 GNU/Linux下载离线安装包 浏览器下载https://downloads.mysql.com/archives/get/p/23/file/mysql-test-8.0.33-linux-glibc2.28…...
如何应对“最后时刻任务堆积”(鼓包现象)
应对“最后时刻任务堆积”(鼓包现象)的方法包括:合理规划项目时间表、强化进度跟踪管理、明确任务优先级、有效的资源配置、提升团队沟通效率。其中,强化进度跟踪管理尤为关键。根据项目管理协会(PMI)的调查…...
C语言,原码、补码、反码
计算机是以补码来存储的 原码:正数最高位为:0;负数最高位为:1 (最高位是符号位) 正数:三码合一 如:2: 原码:0000 0000 0000 0000 0000 0000 0000 0010&#…...
Unifying Short and Long-Term Tracking with Graph Hierarchies—CVPR2023
Unifying Short and Long-Term Tracking with Graph Hierarchies 博客目录 Unifying Short and Long-Term Tracking with Graph Hierarchies摘要概况引言和相关介绍提出的观点 SUSHI核心构建跟踪图的层次结构构建分层剪辑分区 做第二个创新模块的需要将研究的重点从处理遮挡的问…...
深入解析 C# 中的模板方法设计模式
模板方法设计模式(Template Method Pattern)是行为型设计模式中的一种,它定义了一个操作中的算法框架,并允许子类在不改变算法整体结构的情况下,重新定义该算法的某些步骤。该模式通常用于类中包含一系列固定步骤的算法…...
0411 | 软考高项笔记:项目立项
在软考的项目管理知识体系中,技术可行性和经济可行性是项目立项阶段非常重要的两个分析维度。以下是对这两个考点的详细解释和记忆方法: 技术可行性分析 定义: 技术可行性分析是评估项目在现有技术条件和资源下是否能够成功实施。它主要回答…...
ubnetu 服务器版本常用端口和开放的端口对应的应用
1. 使用 netstat 查看端口与进程 netstat 是查看网络连接和监听端口的常用工具。通过以下命令可以列出所有开放的TCP/UDP端口及其关联的进程: sudo netstat -tulnp参数解析: -t:显示TCP端口。 -u:显示UDP端口。 -l࿱…...
【服务器端表单字符验证】
文章目录 一、实验目的二、核心代码实现三、调试关键问题四、总结 一、实验目的 掌握JSP表单验证在服务器端的实现技术,实现对用户输入字符的非空及长度为5的验证,返回对应提示信息并优化用户交互。 二、核心代码实现 前端表单 <form action"…...
pip 与 conda 的全面比较:Python 包管理的深度解析
在 Python 的生态系统中,包管理工具是开发者日常工作的重要组成部分。其中,pip 和 conda 是最常用的两种包管理工具。虽然它们在功能上有一些重叠,但在设计理念、功能范围、依赖管理、环境隔离等方面存在显著差异。本文将从多个维度深入…...
GTID不一致修复
背景描述 GTID模式下,mysql主从切换后,主从同步报错 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION 1, but the master has purged bi…...
conda-pack打包环境到超算上。解决无法打包可编辑包
conda-pack 打包 使用 conda-pack 打包 Conda 环境可以将整个环境打包成一个独立的可移植压缩包,方便在其他机器上解压使用。以下是具体步骤: 1.安装 conda-pack 首先需要安装 conda-pack。你可以通过 conda 或 pip 安装: conda install …...
O(n)复杂度实现寻找数组第k小的数(快速选择算法)
非堆排序实现,利用快速排序思想实现的快速选择 package algorithm;public class Test {public int quickSelect(int nums[], int left, int right, int k){if (left right) return nums[left];int i left - 1, j right 1, x nums[left];while (i < j){do i…...
利用 RNN 预测股票价格:从数据处理到可视化实战
在金融领域,预测股票价格走势一直是众多投资者和研究者关注的焦点。今天,我们将利用深度学习中的循环神经网络(RNN)来构建一个简单的股票价格预测模型,并详细介绍从数据加载、预处理、模型搭建、训练到最终结果可视化的…...
前端从全链路角度分析性能
在面试中回答“从全链路角度分析性能优化”时,需覆盖用户请求到页面渲染的完整链路。以下是结构化回答框架,结合业界实践和最新优化策略: 一、网络传输优化 1. CDN与协议升级 ◦ 使用CDN缩短资源物理距离,结合HTTP/2/3的多路复用和头部压缩特性,提升资源加载效率(如We…...
2025年第十八届“认证杯”数学中国数学建模网络挑战赛【BC题】完整版+代码+结果
# 问题一:随机森林回归from sklearn.ensemble import RandomForestRegressormodel_rf RandomForestRegressor()model_rf.fit(X_train, y_train)# 问题二:LSTM时间序列预测from tensorflow.keras.models import Sequentialmodel_lstm Sequential()model…...
权限管控与数据安全:衡石ChatBot在钉钉中的合规部署指南
数据安全是ChatBot落地的第一道门槛 在数字化转型浪潮下,企业数据查询正从“专业BI工具”向“自然语言交互”跃迁。衡石ChatBot通过钉钉等企业IM工具,让业务人员以对话方式实时获取数据,极大提升了决策效率。然而,数据开放的同时…...
什么是生产管理看板?
简单来说,生产管理看板就是一种把生产过程“摆在明面上”的工具——它可能是贴在墙上的白板,也可能是车间里一块大屏幕,主要作用就是让生产信息一目了然。 这种看板广泛用在工厂、制造车间、或者办公室里,它把生产计划、任务进度、库存情况、设备状态等重要数据通通“晒”…...
YOLO学习笔记 | 一文详解YOLOv11核心创新与实践方法
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== YOLOv11核心创新与实践 一、架构创新1. 模块升级与参数优化2. 多…...
198. 打家劫舍:动态规划
前言 本篇文章来自leedcode,是博主的学习算法的笔记心得。 如果觉得对你有帮助,可以点点关注,点点赞,谢谢你! 题目来源 198. 打家劫舍 - 力扣(LeetCode) 题目描述 思路 1.对于只有一个房间…...
算法基础模板
高精度加法 #include <bits/stdc.h> using namespace std; const int N10005; int A[N],B[N],C[N],al,bl,cl; void add(int A[],int B[],int C[]) {for(int icl-1;~i;i--){C[cl]A[i]B[i];C[cl1]C[cl]/10;C[cl]%10;}if(C[cl])cl; } int main() {string a,b;cin>>a&…...
【大模型LLM第十六篇】Agent学习之浅谈Agent loop的几种常见范式
anthropics agent https://zhuanlan.zhihu.com/p/32454721762 code:https://github.com/anthropics/anthropic-quickstarts/blob/main/computer-use-demo/computer_use_demo/loop.py sampling_loop函数 每次进行循环,输出extract tool_use࿰…...
[特殊字符] Spring Boot 日志系统入门博客大纲(适合初学者)
一、前言 📌 为什么日志在项目中如此重要? 在开发和维护一个后端系统时,日志就像程序运行时的“黑匣子”,帮我们记录系统的各种行为和异常。一份良好的日志,不仅能帮助我们快速定位问题,还能在以下场景中…...
【模拟电路】隧道二极管
与标准二极管相比,隧道二极管通过使用具有令人难以置信的大掺杂水平的半导体物质来工作,导致p-n结之间的耗尽层变得比最快的硅二极管窄约1000倍。 一旦隧道二极管正向偏置,整个p-n结开始发生称为电子流“隧穿”的过程。 在测试隧道二极管的…...
qwen-vl 实现OCR的测试
OCR 技术是数字化时代必不可少的实用工具。以前都依赖专业的公司的专业软件才能完成。成本很高。也正因为如此,我国纸质资料的数字化并不普及。基于大模型的ORC 也许会改变这样的现状。 文本识别,也称为光学字符识别 (OCR),可以将印刷文本或…...
3.0/Q2,Charls最新文章解读
文章题目:Exploring the association between socioeconomic inequalities in chronic respiratory disease and all-cause mortality in China: findings from the China Health and Retirement Longitudinal Study DOI:10.3389/fpubh.2024.1472074 中文…...
【大模型系列篇】基于Ollama和GraphRAG v2.0.0快速构建知识图谱
GraphRAG是一种结合了知识图谱和大型语言模型的检索增强生成(RAG)技术。它通过引入图结构化的知识表示和处理方法,显著提升了传统RAG系统的能力,为处理复杂和多样化数据提供了强有力的支持。更多介绍可以跳转《最强检索增强技术Gr…...
Wincc管对象的使用
Wincc管对象的使用 管对象的调用多边形管T形管双T形管管弯头管道大小调整 管对象的调用 打开【图形编辑器】 多边形管 多边形管如下: 一根管子的顶点数是两个,如果修改顶点数,管子就有多少个端点。 修改顶点数为5 此时点击端点然后拖动&#…...
springboot--页面的国际化
今天来实现页面中的国际化 首先,需要创建一个新的spring boot项目,导入前端模板,在我的博客中可以找到,然后将HTML文件放在templates包下,将其他的静态资源放在statics包下,如下图结构 页面的国际化主要在首…...
记 etcd 无法在docker-compose.yml启动后无法映射数据库目录的问题
1、将etcd 单独提取 Dockerfile #镜像 FROM bitnami/etcd:3.5.11 #名称 ENV name"etcd" #重启 ENV restart"always" #运行无权限 ENV ALLOW_NONE_AUTHENTICATION"yes" #端口 EXPOSE 2379 2380 #管理员权限才能创建数据库 USER root # 设置入口点…...
c++关键字new
链接:【C】C中的new关键字用法详解...
数字内容体验的核心价值是什么?
个性化推荐提升满意度 在数字内容体验的构建中,个性化推荐已成为提升用户满意度的核心策略。通过分析用户行为数据、偏好标签及场景特征,系统能够精准匹配内容资源,减少信息过载带来的决策疲劳。例如,基于用户画像的动态推荐算法…...
通过实施最小权限原则(POLP)来保护敏感数据
在处理机密信息时,应始终将确保组织的敏感数据安全放在首位。无论是制定新政策还是参与项目协作,都应采取一切必要预防措施,确保对任何敏感信息进行恰当的访问控制和存储管理。 最小权限原则(POLP)是企业保护客户与员工数据、财务记录、知识…...
VBA即用型代码手册:文档Document
我给VBA下的定义:VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率,而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想,积木编程最重要的是积木如何搭建…...
【力扣hot100题】(089)最长有效括号
这题目真是越做越难了。 但其实只是思路很难想到,一旦会了方法就很好做。 但问题就在方法太难想了…… 思路还是只要遍历一遍数组,维护动态规划数组记录截止至目前位置选取该元素的情况下有效括号的最大值。 光是知道这个还不够,看了答案…...
为什么需要「实体识别」以及 RAG如何和实体识别结合用
🤖 为什么要做「实体识别」? 实体识别(Named Entity Recognition, NER) 是自然语言处理(NLP)中的一种基础技术,它的目标是: 从文本中识别出“有意义”的实体信息,如人名…...
初级社会工作者考试精选题库
通过练习题库中的题目,考生能了解考试的题型、难度分布以及命题规律,明确备考的重点和难点,有针对性地复习知识点,避免盲目备考。 精选练习题 1、社会工作者小王在为社区孤寡老人提供服务时,总是把他们当成自己的父母来…...
Transformer 训练:AutoModelForCausalLM,AutoModelForSequenceClassification
Transformer 训练:AutoModelForCausalLM,AutoModelForSequenceClassification 目录 Transformer 训练:AutoModelForCausalLM,AutoModelForSequenceClassification`AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)`功能概述参数解释`AutoModelForSequen…...
图书管理系统(Python)
运行结果: 源代码: # 定义一个图书类 class Book: def __init__(self, title, author, isbn): self.title title self.author author self.isbn isbn def show_info(self): print(f"{self.title},{self.author},{self.isbn}") # 图书列表…...
2022年全国职业院校技能大赛 高职组 “大数据技术与应用” 赛项赛卷(4卷)任务书
2022年全国职业院校技能大赛 高职组 “大数据技术与应用” 赛项赛卷(4卷)任务书 背景描述:模块A:大数据平台搭建(容器环境)(15分)任务一:Hadoop 完全分布式安装配置任务二…...
装系统的一天!镜像系统!
虚拟机可以装系统,我们都知道,但是虚拟机可以装几个系统呢? macOS: 如何在 Windows 电脑上装 macOS 系统?_windows装mac-CSDN博客 Win10: Win10镜像(官方正版)下载及虚拟机配置(保姆级教程…...
Wincc脚本全部不运行
Wincc脚本全部不运行 前言解决办法操作步骤 前言 这里主要是指旧项目移植到Wincc的高版本,移植后界面的一些功能均会失效。(例如脚本不执行,项目编辑器不可用等情况) 解决办法 Wincc的项目文件中有Dcf文件,Dcf文件包…...
第三节:React 基础篇-React组件通信方案
React 组件通信方案详解及使用场景 以下是 React 组件通信的常用方法及其适用场景,以层级结构呈现: 一、父子组件通信 1. Props 传递 • 实现方式: • 父组件通过 props 向子组件传递数据。 • 子组件通过回调函数 (onEvent) 通知父组件更…...
✨ MOS开关的非线性因素详解 ✨
MOS 开关在模拟电路、开关电源等应用中广泛使用,但其导通特性存在非线性,可能导致信号失真或系统性能下降。以下是主要非线性因素及解决思路: 🔧 1. 导通电阻(Ron)的非线性 机理: Ron 并非固定值…...
解决vcpkg使用VS2022报错问题
转自个人博客:解决vcpkg使用VS2022报错问题 最近,在把Visual Studio2019完全更新到最新Visual Studio2022后,原使用的vcpkg无法正常安装包,会报如下与Visual Studio 2022相关的错误: error: in triplet x64-windows-m…...
基于支持向量回归(SVR)的空气质量预测
基于支持向量回归(SVR)的空气质量预测 1.作者介绍2.支持向量回归(SVR)算法介绍2.1 算法原理2.2 关键概念2.3算法特点2.4与其他回归方法对比 3.基于支持向量回归(SVR)的空气质量预测实验3.1数据集介绍3.2代码…...
【数据结构】排序
目录 1.排序的概念及其运用 1.1排序的概念 1.2常见排序算法 2插入排序 2.1直接插入排序 2.1.1基本思想 2.1.2代码实现 2.1.3特性总结 2.2 希尔排序 2.2.1基本思想 2.2.2代码实现 3.选择排序 3.1选择排序 3.1.1基本思想 3.1.2代码实现 3.1.3特性总结 3.2 堆排…...
4185 费马小定理求逆元
4185 费马小定理求逆元 ⭐️难度:简单 🌟考点:费马小定理 📖 📚 import java.util.Scanner; import java.util.Arrays;public class Main {static int[][] a;public static void main(String[] args) {Scanner sc …...
低代码控件开发平台:飞帆中粘贴富文本的控件
效果: 链接: https://fvi.cn/729...
偶氮二异丁腈(AIBN)的物化性质及其在合成中的应用
偶氮二异丁腈(AIBN)是一种常用的自由基引发剂,是一种白色结晶性粉末,不溶于水,但溶于甲醇、乙醇、丙酮、乙醚、甲苯等有机溶剂和乙烯基单体。 AIBN在60℃以上会分解形成异丁腈基,从而引发自由基反应。其分解温度区间为50ÿ…...