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

从零开始学习C++ -- 基础知识

C入门基础1.C的第一个程序2.命名空间2.1 namespace的价值2.2 namespace的定义2.3命名空间使用3.C输入输出4.缺省参数5.函数重载6.引用6.1引用的概念和定义6.2引用的特性6.3引用的使用6.4const引用6.5指针和引用的关系7.inline8.nullptr1.C的第一个程序#includeiostreamusingnamespacestd;intmain(){coutHello Worldendl;return0;}2.命名空间2.1 namespace的价值在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称都存在于全局作用域中可能会导致很多冲突。命名空间的目的就是对标识符进行本地化以避免命名冲突namespace关键字的出现就是针对这种问题的。2.2 namespace的定义定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{}中即为命名空间的成员命名空间中可以定义变量、函数、类型等。namespace本质是定义一个域这个域跟全局域各自独立不同的域可以定义同名变量所以下面的rand不冲突。C中域有函数局部域全局域命名空间域类域域影响的是编译时语法查找一个变量/函数/类型出处声明或定义的逻辑所以有了域隔离名字冲突就解决了。局部域和全局域除了会影响编译时的查找逻辑还会影响变量的生命周期命名空间域和类域不影响变量的生命周期namespace只能定义在全局当然它还可以嵌套定义。项目工程中多文件中定义的同名namespace会认为是同一个namespace不会冲突。C标准库都放在一个叫std(standard)的命名空间中。#includeiostream#includestdlib.h#includestdio.husingnamespacestd;namespaceabc{intrand10;intAdd(intleft,intright){returnleftright;}structNode{structNode*next;intval;};}intmain(){//这里默认访问的是全局的rand函数指针printf(%p\n,rand);//这里访问的是abc命名空间中的rand变量printf(%d\n,abc::rand);return0;}//关于命名空间的嵌套namespaceasd{namespaceaaa{intrand15;}namespacebbb{intrand20;}}intmain(){printf(%d\n,asd::aaa::rand);printf(%d\n,asd::bbb::rand);return0;}2.3命名空间使用编译查找一个变量的声明/定义默认只会在局部或者全局查找不会到命名空间里去查找。所以下面程序会编译报错。所以我们要使用命名空间中定义的变量/函数有三种方式指定命名空间项目中推荐这种方式。using将命名空间中某个成员展开项目中经常访问的不存在冲突的成员推荐这种方式。展开命名空间中全部成员项目不推荐冲突风险大日常练习程序为了方便推荐使用。namespaceN{inta0;intb0;}//指定命名空间访问intmain(){printf(%d\n,N::a);return0;}//将命名空间中某个成员展开usingN::b;intmain(){printf(%d\n,N::a);printf(%d\n,b);return0;}//将命名空间全部展开usingnamespaceN;intmian(){printf(%d\n,a);printf(%d\n,b);return0;}3.C输入输出是Input Output Stream的缩写是标准的输入、输出流库定义了标准的输入、输出对象。std::cin是istream类的对象它主要面向窄字符的标准输入流。std::cout是ostream类的对象它主要面向窄字符的标准输出流。std::endl是一个函数流插入输出时相当于一个换行符加刷新缓冲区是流插入运算符是流提取运算符。C输入输出不需要像printf/scanf输入输出那样指定格式C输入输出可以自动识别变量类型。cout/cin/endl等都属于C标准库C标准库都放在std命名空间中所以要通过命名空间的使用方式使用它们。一般练习中我们可以使用using namespace std实际项目开发中不建议。这里我们没有包含stdio.h也可以使用printf和scanf在包含间接包含了。VS系列编译器是这样的别的编译器可能报错。#includestdio.husingnamespacestdintmain(){inta0;doubleb0.1;charcx;counta b cendl;std::coutabcstd::endl;scanf(%d%lf\n,a,b);printf(%d %lf\n,a,b);return0;}//在io需求比较高的地方//如大部分大量输入的竞赛题中//加以下3行代码可以提高效率ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);4.缺省参数缺省参数是声明或定义时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实参则采用该形参的的缺省值否则使用指定的实参缺省参数分为全缺省和半缺省参数。有些地方把缺省参数也叫默认参数全缺省就是全部形参给缺省值半缺省就是部分形参给缺省值。C规定半缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值。带缺省参数的函数调用C规定必须从左到右依次给实参不能跳跃给实参。函数声明和定义分离时缺省参数不能在函数声明和定义中同时出现规定必须函数声明给缺省值。#includeiostream#includeassert.husingnamespacestd;voidFunc(inta0){coutaendl;}intmain(){Func();Func(10);// 没有传参时 使用 参数的默认值//传参时使用指定的实参return0;}#includeiostreamusingnamespacestd;// 全缺省voidFunc1(inta10,intb20,intc30){couta aendl;coutb bendl;coutc cendlendl;}//半缺省voidFunc2(inta,intb10,intc20)couta aendl;coutb bendl;coutc cendlendl;intmain(){Func1();Func1(1);Func1(1,2);Func1(1,2,3);Func2(100);Func2(100,200);Func2(100,200,300);return0;}5.函数重载C支持在同一作用域中出现同名函数但是要求这些同名函数的形参不同可以是参数个数不同或者类型不同。这样C函数调用就表现出了多态行为使用更灵活。C语言是不支持同一作用域中出现同名函数的。#includeiostreamusingnamespacestd;// 1、 参数类型不同intAdd(intleft,intright){coutint Add(int left, int right)endl;returnleftright;}doubleAdd(doubleleft,doubleright){coutdouble Add(double left, double right)endl;returnleftright;}// 2、参数个数不同voidf(){coutf()endl;}voidf(inta){}---------此时调用f()会报错编译器不知道调用谁 coutf(int a)endl;//3、参数类型顺序不同voidf(inta,charb){coutf(int a,char b)endl;}voidf(charb,inta){coutf(char b, int a)endl;}// 返回值不同不能作为重载条件 //void fxx()//{}////int fxx()//{// return 0;//}// 下面两个函数构成重载// f()但是调用时会报错存在歧义编译器不知 道调用谁voidf1(){coutf()endl;}voidf1(inta10){coutf(int a)endl;}intmain(){Add(10,20);Add(10.1,20.2);f();f(10);f(10,a);f(a,10);return0;}6.引用6.1引用的概念和定义引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间它和它引用的变量共用同一块内存空间。类型 引用别名 引用对象#includeiostreamusingnamespacestd;intmain(){inta0;// 引用 b和c是a的别名intba;intca;// 也可以给别名b取别名,d相当于还是a的别名intdb;d;// 这里取地址我们看到是一样的coutaendl;coutbendl;coutcendl;coutdendl;return0;}6.2引用的特性引用在定义时必须初始化一个变量可以有多个引用引用一旦引用一个实体就不能引用其他实体#includeiostreamusingnamespacestd;intmain(){inta10;// 编 译报 错 “ra”: 必 须 初 始 9//int ra;intba;intc20;// 这里并非让b引用c// 这里是一个赋值bc;coutaendl;coutbendl;coutcendl;return0;6.3引用的使用引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象。引用传参跟指针传参功能是类似的引用传参相对更方便一些。引用和指针在实践中相辅相成功能有重叠性但是各有特点互相不可替代。C的引用跟其他语言的引用是有很大的区别的除了用法最大的点C引用定义后不能改变指向。voidSwap(intrx,intry){inttmprx;rxry;rytmp;}intmain(){intx0,y1;coutx yendl;Swap(x,y);coutx yendl;return0;}//指针变量也可以取别名LTNode* phead就是给 指针变量取别名//这样就不需要用二级指针了相对而言简化了程序//void ListPushBack(LTNode** phead, int x)//void ListPushBack(LTNode* phead, int x)6.4const引用可以引用一个const对象但是必须用const引用。const引用也可以引用普通对象因为对象的访问权限在引用过程中可以缩小不能放大。不过需要注意的是类似 int rb a3; double d 12.34; int rd d; 这样一些场景下a3的和结果保存在一个临时对象中 int rd d 也是类似在类型转换中会产生临时对象存储中间值也就是rb和rd引用的都是临时对象而C规定临时对象具有常性所以这里就触发了权限放大必须要用常引用才可以。所谓临时对象就是编译器需要一个空间暂存表达式的求值结果临时创建一个未命名对象C中把这个未命名对象叫做临时对象。intmian(){constinta10;//这里引用对a访问权限放大//int ra a;//这样可以constintraa;//不能给常量赋值//ra;//这里引用对b访问权限缩小intb20;constintrbb;//不能给常量赋值//rbreturn0;}#includeiostreamusingnamespacestd;intmain(){inta10;constintra30;// 编译报错:“初始化”:无法从“int”转换为“int ”// int rb a * 3;constintrba*3;doubled12.34;// 编译报错“初始化”:无法从“double”转换为“int ”// int rd d;constintrdd;return0;}6.5指针和引用的关系C中指针和引用就像两个性格迥异的亲兄弟指针是哥哥引用是弟弟在实践中他们相辅相成功能有重叠性但是各自有各自特点互相不可替代。• 语法概念上引用是一个变量的取别名不开空间指针是存储一个变量地址要开空间。• 引用在定义时必须初始化指针建议初始化但是语法上不是必须的。• 引用在初始化时引用一个对象后就不能再引用其他对象而指针可以在不断地改变指向对象。• 引用可以直接访问指向对象指针需要解引用才是访问指向对象。• sizeof中含义不同引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32位平台下64位下是8byte)• 指针很容易出现空指针和野指针的问题引用很少出现引用使用起来相对更安全一些。7.inline• inline修饰的函数叫做内联函数编译时C编译器会在调用的地方展开内联函数这样调用内联函数就需要建立栈帧了就可以提高效率。• inline对于编译器而言只是一个建议也就是说你加了inline编译器也可以选择在调用的地方不展开不同编译器关于inline什么情况展开各不相同因为C标准没有规定这个。inline适用于频繁调用的短小函数对于递归函数代码相对多一些的函数加上inline也会被编译器忽略。• C语言实现宏函数也会在预处理时替换展开但是宏函数实现很复杂很容易出错的且不方便调试C设计了inline目的就是替代C的宏函数。• vs编译器 debug版本下面默认是不展开inline的这样方便调试debug版本想展开需要设置下以下两个地方。• inline不建议声明和定义分离到两个文件分离会导致链接错误。因为inline被展开就没有函数地址链接时会出现报错。#includeiostreamusingnamespacestd;inlineintAdd(intx,inty){intretxy;ret1;ret1;ret1;returnret;}intmain(){// 可 以 通 过 汇 编 观察程序 是 否 展 开// 有call Add语 句就 是 没 有 展 开没 有就 是 展 开 了intretAdd(1,2);coutAdd(1,2)*5endl;return0;}#includeiostreamusingnamespacestd;// 实 现一个 ADD宏函数的 常见 问 题//#define ADD(int a, int b) return a b;//#define ADD(a, b) a b;//#define ADD(a, b) (a b)// 正确 的宏实 现// // // #define ADD(a, b) ((a) (b))// 为什 么 不 能加 分 号?// 为什 么 要 加 外面 的 括 号?// 为什 么 要 加里面 的 括 号?intmain(){intretADD(1,2);coutADD(1,2)endl;coutADD(1,2)*5endl;intx1,y2;ADD(xy,x|y);// - (xyx|y)return0;}// F.h#includeiostreamusingnamespacestd;inlinevoidf(inti);// F.cpp#includeF.hvoidf(inti){coutiendl;}// main.cpp#includeF.hintmain(){// 链 接错 误无 法 解析 的 外 部符 号 f(10);f(10);return0;//void__cdecl f(int) (?fYAXHZ)}8.nullptrC中NULL可能被定义为字面常量0,C语言中为void*。nullptr是特殊关键字它可以隐式转换成其他类型的指针不能被转换成整数类型。#includeiostreamusingnamespacestd;voidf(intx){coutf(int x)endl;}voidf(int*ptr){coutf(int* ptr)endl;}intmain(){f(0);// 本 想 通 过 f(NULL)调用 指 针 版本 的 f(int* ptr)函数//但 是 由 于NULL被 定 义 成0调用 了f(int x)//因此与 程序 的 初 衷 相悖 。f(NULL);f((int*)NULL);// 编 译报 错 error C2665: “f”: 2 个 重 载 中 没 有一个 可 以 转 换所 有参数类型// f((void*)NULL);f(nullptr);//C必须强转void*p1NULL;int*p2(int*)p1;//使用nullptrvoid*p1nullptr;int*p2p1;//C语言有隐式类型转换可以通过void*p1NULL;int*p2p1;return0;}

相关文章:

从零开始学习C++ -- 基础知识

C入门基础1.C的第一个程序2.命名空间2.1 namespace的价值2.2 namespace的定义2.3命名空间使用3.C输入&输出4.缺省参数5.函数重载6.引用6.1引用的概念和定义6.2引用的特性6.3引用的使用6.4const引用6.5指针和引用的关系7.inline8.nullptr1.C的第一个程序 #include <iost…...

联想M920x黑苹果配置指南:从硬件适配到性能优化的完整方案

联想M920x黑苹果配置指南&#xff1a;从硬件适配到性能优化的完整方案 【免费下载链接】M920x-Hackintosh-EFI Hackintosh Opencore EFIs for M920x 项目地址: https://gitcode.com/gh_mirrors/m9/M920x-Hackintosh-EFI 联想M920x作为一款紧凑型商用主机&#xff0c;通过…...

Connect to Oracle Database with JDBC Driver

1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...

Flutter 实现点击任意位置收起键盘的最佳实践

痛点 在 Flutter 开发中&#xff0c;TextField 聚焦后会弹出键盘&#xff0c;关闭键盘通常需要&#xff1a; 点击系统返回键点击输入框外的空白区域&#xff08;但很多情况下点击空白区域也没反应&#xff09;点击其他输入框&#xff08;键盘会切换到另一个输入框&#xff0c;不…...

Ling-1T万亿参数模型:高效推理新体验

Ling-1T万亿参数模型&#xff1a;高效推理新体验 【免费下载链接】Ling-1T-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-1T-FP8 导语&#xff1a;近日&#xff0c;inclusionAI团队正式发布了Ling系列2.0版本的旗舰模型——Ling-1T-FP8&#xff…...

Windows 下 Docker Desktop 安装教程及常用命令(2026 最新)

Windows 安装 Docker 核心是 Docker Desktop WSL2&#xff08;推荐&#xff09;&#xff0c;家庭版 / 专业版通用&#xff0c;性能好、最稳定&#xff0c;下面是详细步骤。 一、系统与硬件要求 1. 1、系统版本 Windows 10 64 位&#xff1a;家庭 / 专业 / 企业 22H2&#x…...

Iceoryx(冰羚):无锁队列与并发控制的设计与实现3(源码解析)

接上篇设计4: 索引管理层&#xff08; MpmcIndexQueue / CyclicIndex&#xff09;Subscriber存储数据使用的是queue&#xff0c;是为了保证数据的读取顺序。MpmcLockFreeQueue 为了满足多个进程同时写的情况&#xff0c;采用了索引数据分离的方案&#xff08;底层的索引实现为 …...

2026 ASNT-TC-1A 无损检测 Ⅱ/Ⅲ 级认证指南|API/ASME 认证必备 + 报考实操

一、行业刚需&#xff1a;为何 ASNT-TC-1A 资质是工业检测领域的「硬通货」在石油天然气、压力容器、钢结构焊接等工业领域&#xff0c;无损检测&#xff08;NDT&#xff09;是产品质量保障的核心环节&#xff0c;而ASNT-TC-1A作为美国无损检测学会制定的人员资格鉴定和认证标准…...

基于 eBPF 与 Python 异步代理的嵌入式 OT 网络微隔离架构实战

前言与业务背景最近在主导一个船舶 OT 网络的底层加固项目&#xff0c;遇到了一个典型的边缘计算资源受限问题。根据最新的网络安全规范&#xff08;如 IACS UR E27&#xff09;&#xff0c;边缘节点必须具备跨区域流量的深度过滤以及审计日志的防篡改留存能力。如果照搬传统的…...

HarmonyOS6 ArkTS List 设置编辑模式

文章目录一、功能概述二、官方核心知识点1. 编辑模式实现原理2. 列表数据驱动3. 列表项操作三、完整可运行代码四、代码功能详解1. 编辑模式状态控制2. 编辑按钮切换3. 列表项动态显示删除按钮4. 删除列表项5. LazyForEach 高性能渲染五、运行效果总结一、功能概述 List 编辑模…...

4步实现Obsidian插件全中文显示:从技术原理到实践指南

4步实现Obsidian插件全中文显示&#xff1a;从技术原理到实践指南 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n Obsidian作为一款强大的知识管理工具&#xff0c;其生态系统依赖于丰富的第三方插件扩展功能。然而&#…...

Eye-in-Hand还是Eye-to-Hand?深入解读OpenCV手眼标定背后的四种经典算法(Tsai, Park, Horaud)

Eye-in-Hand还是Eye-to-Hand&#xff1f;深入解读OpenCV手眼标定背后的四种经典算法 在工业机器人视觉引导系统中&#xff0c;相机与机械臂的精确标定直接决定了整个系统的定位精度。当工程师第一次调用OpenCV的calibrateHandEye()函数时&#xff0c;面对CALIB_HAND_EYE_TSAI、…...

Simulink频域分析避坑指南:如何准确获取谐振频率(含MATLAB代码)

Simulink频域分析实战&#xff1a;谐振频率精准提取方法论与MATLAB实现 在控制系统设计与分析领域&#xff0c;频域特性是评估系统动态性能的核心指标之一。而谐振频率作为频域响应中的关键特征点&#xff0c;直接影响着系统的稳定性和响应速度。然而&#xff0c;许多工程师在使…...

LFM2.5-1.2B-Thinking-GGUF开源可部署:自主可控轻量模型替代方案深度评测

LFM2.5-1.2B-Thinking-GGUF开源可部署&#xff1a;自主可控轻量模型替代方案深度评测 1. 模型概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;专为低资源环境优化设计。该模型采用GGUF格式存储&#xff0c;配合llama.cpp运行时&#xff0c;能…...

# 发散创新:用 Rust实现一个轻量级游戏日引擎的核心调度机制 在现代游戏开发中,**高效的任务调度与资源管理**是性能

发散创新&#xff1a;用 Rust 实现一个轻量级游戏日引擎的核心调度机制 在现代游戏开发中&#xff0c;高效的任务调度与资源管理是性能瓶颈的关键所在。尤其是在“游戏日”这类强调多线程并行处理、实时响应的场景下&#xff0c;传统基于 C 或 Python 的方案往往因内存安全问题…...

开源工具Cowabunga Lite:iOS设备零门槛个性化方案全解析

开源工具Cowabunga Lite&#xff1a;iOS设备零门槛个性化方案全解析 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 在iOS生态系统中&#xff0c;用户对设备个性化的需求与系统封闭性之间始终…...

TAICHI-flet终极排障指南:从新手到高手的完整解决方案

TAICHI-flet终极排障指南&#xff1a;从新手到高手的完整解决方案 【免费下载链接】TAICHI-flet 基于flet的一款windows桌面应用&#xff0c;实现了浏览图片、音乐、小说、漫画、各种资源的功能。 项目地址: https://gitcode.com/GitHub_Trending/ta/TAICHI-flet TAICHI…...

H3C无线调优案例

用户报无线经常掉线&#xff0c;用户现场无线用的H3C 首先登录无线控制器搜集对应接入体验差的AP的诊断日志&#xff0c;从日志中可以看到AP有线上行口的组播广播包数量远远超过了单播报文&#xff1b;没有CRC错误报文&#xff0c;说明网线质量没有问题。接着看&#xff1a;我们…...

Jetson Nano/Xavier NX上,手把手解决Realsense D435i IMU数据丢失的完整配置流程

Jetson Nano/Xavier NX上解决Realsense D435i IMU数据丢失的实战指南 当你兴奋地启动Realsense D435i摄像头&#xff0c;准备获取IMU数据来增强你的机器人项目时&#xff0c;却发现虽然IMU话题存在&#xff0c;但数据流却空空如也——这种挫败感我深有体会。作为在Jetson平台上…...

如何快速下载Google Drive受保护PDF:终极免费解决方案指南

如何快速下载Google Drive受保护PDF&#xff1a;终极免费解决方案指南 【免费下载链接】Google-Drive-PDF-Downloader 项目地址: https://gitcode.com/gh_mirrors/go/Google-Drive-PDF-Downloader 你是否经常遇到Google Drive中那些"仅查看"权限的PDF文件&am…...

保姆级教程:用Cloudreve+Obsidian打造私人云笔记(附WebDAV配置避坑指南)

零基础构建私有知识库&#xff1a;Cloudreve与Obsidian的完美联姻 在信息爆炸的时代&#xff0c;如何高效管理个人知识资产已成为现代人的刚需。想象一下&#xff1a;你正在咖啡馆用iPad记录灵感&#xff0c;回到家打开电脑时这些想法已自动同步&#xff1b;出差途中用手机查阅…...

MBPFan:解决MacBook Linux系统散热难题的智能温控工具

MBPFan&#xff1a;解决MacBook Linux系统散热难题的智能温控工具 【免费下载链接】mbpfan 项目地址: https://gitcode.com/gh_mirrors/mb/mbpfan 当你在Linux系统下使用MacBook处理文档、编写代码或观看视频时&#xff0c;是否遇到过设备突然发烫、风扇噪音忽大忽小的…...

AI辅助开发深度探索:在快马平台上对比评测类qoderwork官网的AI代码生成能力

最近在研究AI辅助开发时&#xff0c;发现一个很有意思的现象&#xff1a;同样是生成一个网页项目&#xff0c;不同AI模型给出的代码风格和实现思路差异很大。这让我萌生了一个想法——能不能搭建一个平台&#xff0c;专门用来对比评测不同AI模型的代码生成能力&#xff1f;就像…...

探索 Carsim 与 Simulink 联合实现三车队列 PID 控制

队列控制 carsim联合simulink pid控制 实现3辆车的队列控制&#xff0c;跟随头车车速变化&#xff0c;保合理车距。在自动驾驶和车辆动力学研究领域&#xff0c;实现多车队列控制&#xff0c;使其能跟随头车车速变化并保持合理车距&#xff0c;是一项极具挑战性但又十分关键的任…...

如何突破内容访问限制?5类开源工具的技术解析与场景适配

如何突破内容访问限制&#xff1f;5类开源工具的技术解析与场景适配 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;优质内容往往被各种访问限制所阻…...

AutoHotkey实战:5分钟搞定Mac/Windows跨平台快捷键统一(附完整脚本)

AutoHotkey实战&#xff1a;5分钟搞定Mac/Windows跨平台快捷键统一&#xff08;附完整脚本&#xff09; 对于频繁切换Mac和Windows双系统的开发者来说&#xff0c;最令人抓狂的莫过于两种操作系统下完全不同的快捷键体系。特别是Cmd/Ctrl键位的混乱&#xff0c;常常让人在复制粘…...

AsyncSerial:嵌入式非阻塞串口通信实现

1. AsyncSerial 库深度解析&#xff1a;面向嵌入式实时系统的非阻塞串口通信实现 在嵌入式系统开发中&#xff0c;串口&#xff08;UART/USART&#xff09;通信因其硬件资源占用少、协议简单、调试便捷等优势&#xff0c;始终是固件层最基础且高频使用的外设接口。然而&#xf…...

动态规划详解:从入门到精通,这四个案例让你彻底掌握DP思想

面试必考、算法进阶的核心&#xff0c;一篇文章帮你打通任督二脉在算法学习的过程中&#xff0c;动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;绝对是让很多人头疼的一个难点。很多初学者看到DP问题就发怵&#xff0c;其实只要掌握了核心思想&#x…...

轻量级二维码工具性能优化:从加载到部署的全流程实践

轻量级二维码工具性能优化&#xff1a;从加载到部署的全流程实践 【免费下载链接】qrcodejs Cross-browser QRCode generator for javascript 项目地址: https://gitcode.com/gh_mirrors/qr/qrcodejs 二维码生成功能已成为现代Web应用的常见需求&#xff0c;但传统实现方…...

C++vector,智能指针,拷贝构造函数

我将分别介绍 C 中的智能指针、std::vector 动态数组以及拷贝构造函数的概念、用法和适用场景。一、C 智能指针智能指针是用于自动化管理动态分配内存的模板类&#xff0c;位于 <memory> 头文件中。它们通过 RAII&#xff08;Resource Acquisition Is Initialization&…...