c++入门一

参考:https://www.learncpp.com/cpp-tutorial/

  • When you finish, you will not only know how to program in C++, you will know how NOT to program in C++, which is arguably as important.

  • Tired or unhappy programmers make mistakes, and debugging code tends to take much longer than writing it correctly 。

如何最大化学习
1.手打,自己编译,可以让你最快熟悉变异警告和错误,想每一行代码作用,不懂就去深入
2.自己改bug,学会调适
3.用例子试验。改参数看看会发生啥
4.参加测验
5.用学到的内容自己编码

介绍编程语言

机器语言。CPU可以直接读写,0,1组成,每一个0/1是比特,组成命令的比特数量可能不同,一些CPU指令长度是32位,x86可变
由于不同CPU有不同指令集,因此为一种类型的CPU程序不能移植到另一种类型的CPU

汇编语言:每一条指令有缩写表示,可以用名称和其他数字。比机器语言容易读写,但是理解较难,需要重写
才能运行在不同指令集的硬件

高级语言:为了解决可读性和移植性问题,开发了新的编程语言。
编译(C,C++,Pascal):读取源代码,生成可执行程序
解释:更灵活,效率更低。直接执行指令,无需编译成可执行文件。
(java混合使用两者)

C/C++简介:

C语言由贝尔电话实验室的Dennis Ritchie于1972年开发,主要作为一种系统编程语言(一种用于编写操作系统的语言)。
C++(发音为“see plus plus”)由贝尔实验室的Bjarne Stroustrup开发,作为C语言的扩展,始于1979年。C++为C语言增加了许多新功能,它是一种面向对象的语言。
C 和 C++ 的基本设计理念可以概括为“信任程序员”——这既美妙又危险。C++旨在让程序员有高度的自由度来做他们想做的事。然而,这也意味着语言通常不会阻止你做一些没有意义的事情,因为它会假设你这样做是出于某种它不理解的原因。如果新程序员措手不及,可能会陷入很多陷阱。这就是为什么知道在C / C++中不应该做什么几乎与知道应该做什么一样重要的主要原因之一。

C++擅长什么?
C++在需要高性能和精确控制内存和其他资源的情况下表现出色。
电子游戏,实时系统,高性能金融应用(高频交易)
图形应用程序和抹零
办公应用
嵌入式软件‘音频和视频处理
AI,神经网络

介绍C++开发环境

1.定义要解决的问题
2.确定如何解决问题
很多时候,程序员会得到一个想法,坐下来,然后立即开始编写解决方案。这通常会生成属于不良类别的解决方案。
通常,良好的解决方案具有以下特征:straightforward,welldocumented,模块化构建,鲁棒性,意外情况时提供有用信息
当您坐下来立即开始编码时,您通常会想“我想做”,因此您可以实施最快实现目标的解决方案。这可能导致程序脆弱,以后难以更改或扩展,或者存在大量错误(技术缺陷)。

研究表明,程序员实际上只有20%的时间花在编写初始程序上。另外 80% 用于维护,包括调试(删除错误)、应对环境变化的更新(例如,在新操作系统版本上运行)、增强(提高可用性或功能的微小更改)或内部改进(提高可靠性或可维护性)。
因此,值得你花一点额外的时间(在你开始编码之前)思考解决问题的最佳方法,你正在做出什么假设,以及你如何计划未来,以便为自己节省大量的时间和麻烦。

3.编写程序

4.编译源代码
检查代码是否遵循C++语法规则,将C+源码转换为机器语言文件name.ojb

5.链接对象文件和库
获取编译器生成的所有文件,并将它们组合在单个可执行程序中。
除了能链接对象文件外,链接器还能链接库文件。(预编译代码集合,被打包以便其他程序重用)
C++核心语言实际上相当小而简洁(您将在这些教程中学到很多内容)。但是,C++还附带了一个称为C++标准库(通常缩写为标准库)的广泛库,该库提供了可在程序中使用的其他功能。C++标准库中最常用的部分之一是 iostream 库,它包含用于在显示器上打印文本和从用户获取键盘输入的功能。几乎每个编写C++程序都以某种形式使用标准库,因此标准库链接到您的程序中是很常见的。大多数链接器会在您使用标准库的任何部分后立即自动链接,
第三,,链接器确保正确解析所有跨文件依赖项。例如,如果在一个.cpp文件中定义某些内容,然后在另一个.cpp文件中使用它,则链接器会将两者连接在一起。如果链接器无法将引用连接到具有其定义的某些内容,则会收到链接器错误,并且链接过程将中止。
链接器完成链接所有对象文件和库后(假设一切顺利),您将拥有一个可执行文件,然后可以运行该文件!

链接库

链接库(Library)是预先编译好的可重用代码的集合,可以通过链接到应用程序中来实现功能的共享和重用。链接库通常包含函数、类、数据结构等代码和数据资源,通过将其与应用程序进行链接,可以在应用程序中调用这些库中提供的功能。

链接库有两种主要类型:静态链接库和动态链接库。

静态链接库(Static Library):

静态链接库在编译时被链接到应用程序中,形成一个独立的可执行文件。这意味着应用程序会包含链接库的所有代码和数据,使得应用程序能够独立运行。
使用静态链接库的优点是简单、方便,无需额外的运行时环境依赖。但缺点是每个使用该库的应用程序都会复制一份库的代码和数据,造成代码冗余和文件占用空间增加。
动态链接库(Dynamic Link Library,DLL):

动态链接库在运行时被加载到内存中,多个应用程序可以共享同一个动态链接库的实例。这意味着不同的应用程序可以共享同一个库,从而减少了内存开销和磁盘空间。
使用动态链接库的优点是节省内存和磁盘空间,同时可以通过更新动态链接库来修复和改进库中的功能。但缺点是应用程序在运行时需要依赖相应的动态链接库文件,如果缺少或版本不匹配会导致运行错误。
链接库广泛应用于软件开发中,可以提供各种功能和服务,例如数据库操作、图形界面、网络通信等。常见的链接库包括标准库(如C++标准库、C标准库)、第三方库(如OpenCV、Boost)、操作系统提供的库(如Windows API)等。

要在项目中使用链接库,通常需要将库文件与应用程序进行链接,并在代码中引用相应的头文件来访问库中的函数和数据结构。具体的链接方法和引用方式取决于开发环境和编程语言。
6.Testing 测试
7.Debugging 调试

IDE介绍

Integrated development environments (IDEs)

visual studio (选择C++桌面开发,了Windows 10 SDK(或Windows 11 SDK))

在这里插入图片描述
Code::Blocks (for Linux or Windows)
Blocks。Code::Blocks是一个免费的,开源的,跨平台的IDE,可以在Linux和Windows上运行。
某些 Linux 安装可能缺少使用 Code::Block 运行或编译程序所需的依赖项。:sudo apt-get install build-essential.

Visual Studio Code

是经验丰富的开发人员的热门选择,因为它快速,灵活,开源,适用于多种编程语言,并且可用于许多不同的平台。缺点是VS Code比此列表中的其他选项更难正确配置(在Windows上,也更难安装)。

编译第一个程序program

Projects 项目:
通常从一个项目开始,每个项目project对应一个程序program

控制台项目:
控制台项目意味着我们将创建可以从Windows,Linux或Mac控制台运行的程序。

默认情况下,控制台应用程序没有图形用户界面 (GUI),它们将文本打印到控制台,从键盘读取输入,并编译为独立的可执行文件。

IDE 中的编译、生成、重新生成、清理和运行/启动选项之间有什么区别?

编译代码文件时,IDE 可能会缓存生成的对象文件。这样,如果将来再次编译程序,则不需要重新编译任何未修改的代码文件 - 可以重用上次缓存的对象文件。这可以显著加快编译时间(以一点磁盘空间为代价)。

Build :生成编译项目或工作区/解决方案中所有已修改的代码文件,然后将目标文件链接到可执行文件中。如果自上次生成以来未修改任何代码文件,则此选项不执行任何操作。

Clean:删除所有缓存的对象和可执行文件,以便下次生成项目时,将重新编译所有文件并生成新的可执行文件。

Rebuild :clean+build

Compile:重新编译单个代码文件(无论它以前是否已缓存)。此选项不会调用链接器或生成可执行文件。

Run/start :执行上一次build生成的可执行文件。一些IDE会(比如Visual Studio)在run之前build确保运行的是代码最新版本

一些常见的C++问题

一般运行时问题

  1. 执行程序时,控制台窗口闪烁,然后立即关闭
    首先,添加或确保以下行靠近程序的顶部(Visual Studio 用户,请确保这些行出现在“pch.h”或 #include“stdafx.h”#include 之后,如果存在):
#include <iostream>
#include <limits>

其次,在 main() 函数的末尾添加以下代码(在 return 语句之前):

std::cin.clear(); // reset any error flags
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore any characters in the input buffer until we find an enter character
std::cin.get(); // get one more char from the user

这将导致程序等待用户按某个键,然后再继续,这将使您有时间在操作系统关闭控制台窗口之前检查程序的输出。

  1. 我运行了我的程序并得到了一个窗口,但没有输出。
    您的病毒扫描程序或反恶意软件可能会阻止执行。尝试暂时禁用它,看看这是否是问题所在。

  2. 我的程序可以编译,但无法正常工作。我该怎么办?
    调试它

一般编译时问题

  1. 编译程序时,收到有关未解析的外部符号_main或_WinMain@16的错误
    这意味着你的编译器找不到你的 main() 函数。所有程序都必须包含 main() 函数。

  2. 我正在尝试使用 C++11/14/17/XX 功能,但它不起作用
    如果您的编译器较旧,则它可能不支持该语言的这些最新添加功能。在这种情况下,请升级编译器。

  3. 当尝试使用 cin、cout 或 endl 时,编译器会说 cin、cout 或 endl 是“未声明的标识符”
    请确保在文件顶部附近包含以下行:

#include <iostream>

其次,确保每次使用 cin、cout 和 endl 都以“std::”为前缀。

std::cout << "Hello world!" << std::endl;

如果这不能解决您的问题,则可能是您的编译器已过期,或者安装已损坏。尝试重新安装和/或升级到最新版本的编译器。

  1. 当尝试使用 endl 结束打印的行时,编译器说 end1 是“未声明的标识符”
    确保不要将endl中的字母l(小写L)误认为数字1。endl都是字母。确保您的编辑器使用的字体清楚地表明字母小写 L、大写 i 和数字 1 之间的差异。此外,在许多非编程字体中,字母大写字母 o 和数字零很容易混淆。

  2. 编译程序时,出现“文件末尾没有换行符”错误
    C++ 标准要求所有源 (.cpp) 文件都以换行符结尾。

C++ 标准要求所有源 (.cpp) 文件都以换行符结尾

  1. c:\vcprojects\test.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive

当 Microsoft Visual C++ 编译器设置为使用预编译标头,但C++代码文件中的一个(或多个)未 #include“stdafx.h”或 #include“pch.h”作为代码文件的第一行时,会发生此错误。我们建议的解决方法是关闭预编译标头

  1. “1MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ)”

您可能已经创建了 Windows 图形应用程序,而不是控制台应用程序。重新创建项目,并确保将其创建为 Windows(或 Win32)控制台项目。

  1. “Cannot find or open the PDB file”

这是一个警告,而不是错误,因此它不会影响您的程序。但是,这很烦人。要修复它,请进入调试菜单 -> 选项和设置 ->符号,然后选中“Microsoft符号服务器”。

配置编译器:构建配置

生成配置(也称为生成目标)是项目设置的集合,用于确定 IDE 将如何生成项目。构建配置通常包括可执行文件的名称、IDE 将在哪些目录中查找其他代码和库文件、是保留还是删除调试信息、让编译器优化程序的程度等内容。通常,您需要将这些设置保留为其默认值,除非您有特定原因需要更改某些内容。

在 IDE 中创建新项目时,大多数 IDE 将为您设置两种不同的生成配置:发布配置和调试配置。

  • 调试配置旨在帮助您调试程序,通常是编写程序时将使用的配置。此配置关闭所有优化,并包含调试信息,这使程序更大、更慢,但更易于调试。默认情况下,通常选择调试配置作为活动配置。

  • 发布配置旨在在向公众发布程序时使用。此版本通常针对大小和性能进行了优化,并且不包含额外的调试信息。由于发布配置包括所有优化,因此此模式对于测试代码的性能也很有用

修改构建配置:
每当更新项目设置时,请对所有生成配置进行更改

配置编译器:编译器扩展

建议关闭编译器扩展:
编写使用编译器扩展的程序允许您编写与C++标准不兼容的程序。使用非标准扩展的程序通常不会在其他编译器(不支持这些相同的扩展)上编译,或者如果它们这样做,它们可能无法正常运行。

配置编译器:警告和错误级别

当你编写程序时,编译器将检查以确保你遵循了C++语言的规则

如果您做了一些明显违反语言规则的事情,在编译过程中,编译器将发出一个错误,提供包含错误的行号,以及一些关于预期内容与发现内容的文本。实际错误可能位于该行或前一行。识别并修复错误代码行后,可以再次尝试编译。

在其他情况下,编译器可能会发现看似错误的代码,但编译器无法确定(记住座右铭:“相信程序员”)。在这种情况下,编译器可以选择发出警告。警告不会停止编译,而是向程序员发出似乎不对劲的通知。

Best practice 最佳实践:
不要让警告堆积如山。在遇到它们时解决它们(就好像它们是错误一样)。否则,有关严重问题的警告可能会在有关非严重问题的警告中丢失。

在极少数情况下,可能需要显式告诉编译器不要为相关代码行生成特定警告。

提高警告级别

默认情况下,大多数编译器只会生成有关最明显问题的警告。但是,您可以要求编译器更加自信地为它发现奇怪的事情提供警告。

1.在“解决方案资源管理器”窗口中右键单击项目名称,然后选择“属性”

2.在“项目”对话框中,首先确保“配置”字段设置为“所有配置”。

3.然后选择“C/C++ >常规”选项卡,并将“警告级别”设置为“级别 4”(/W4)

Best practice 最佳实践:
启用“将警告视为错误”。这将强制您解决导致警告的所有问题。

将“将警告视为错误”设置为“是 (/WX)”。

配置编译器:选择语言标准

有许多不同的C++版本可用(C++98、C++03、C++11、C++14、C++17、C++20、C++23 等),您的编译器如何知道要使用哪一个?通常,编译器会选择一个默认标准。通常,默认值不是最新的语言标准 - 许多默认为C++14,它缺少许多最新和最强大的功能。

如果您希望使用不同的语言标准(您可能会这样做),则必须配置 IDE/编译器才能这样做。

语言标准的代码名称:最终的语言标准以其最终确定的年份命名(例如C++17于2017年定稿)。

您应该选择哪种语言标准?
在专业环境中,通常会选择比最新标准落后一两个版本的语言标准(例如,如果 C++20 是最新版本,则表示 C++14 或 C++17)。这样做通常是为了确保编译器制造商有机会解决缺陷,以便充分理解新功能的最佳实践。在相关的情况下,这也有助于确保更好的跨平台兼容性,因为某些平台上的编译器可能无法立即提供对较新语言标准的完全支持。

若要选择语言标准,请打开项目,然后转到“项目”菜单>“(应用程序的名称)属性”,然后打开“配置属性”>“C/C++ > 语言”。

导出配置

每次创建新项目时都必须重新选择所有设置选项,这很麻烦。幸运的是,大多数 IDE 都提供了一种导出设置的方法。这通常是通过使用所需的设置创建新的项目模板,然后在创建新项目时选择该项目模板来完成的。

在 Visual Studio 中,此选项可通过 Project -> 导出模板获得。选择“项目模板”,添加名称和可选描述(例如C++20控制台应用程序),然后单击“完成”。下次创建新项目时,您会看到此模板显示在项目模板列表中。使用此模板创建新项目后,它可能无法打开任何文件。可以通过转到“解决方案”-> <项目名称>->源文件-> <模板名称>.cpp,在“解决方案资源管理器”窗口中打开.cpp文件。

.cpp 与.h文件关系运行/启动从以前的生成执行可执行文件。某些 IDE(例如 Visual Studio)会在执行“运行”之前调用“构建”,以确保您运行的是最新版本的代码

在C++中,通常使用.cpp文件和.h文件(或者.hpp文件)组合来管理代码。这种文件组织方式常被称为分离式编译。

.cpp文件包含实际的源代码实现。它包含类的方法定义、函数的具体实现等。

.h文件(或者.hpp文件)是头文件,它包含类、结构和函数的声明。头文件中通常只包含类成员函数的原型、变量的声明和必要的宏定义等。可以将头文件看作是对应源文件的接口。

基本上,.cpp文件包含了实现,而.h文件包含了声明。头文件的目的是在不暴露实现细节的情况下,向其他源文件提供访问类和函数的接口。

在编译过程中,编译器会将.cpp文件编译为目标文件,然后将多个目标文件链接在一起形成可执行文件。头文件的声明用于验证代码的正确性并确保符号解析正确。

因此,.cpp文件和.h文件之间的关系是,.cpp文件包含了具体实现,而.h文件提供了接口声明。头文件通过#include预处理指令来引入,以便在编译过程中能够访问到相应的声明。

OPENCV

配置环境
https://blog.csdn.net/ycx_ccc/article/details/123258001

报错dll找不到
https://blog.csdn.net/op_chaos/article/details/114023937

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/118320.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift 如何从图片数据(Data)检测原图片类型?

功能需求 如果我们之前把图片对应的数据(Data)保持在内存或数据库中,那么怎么从 Data 对象检测出原来图片的类型呢? 如上图所示:我们将 11 张不同类型的图片转换为 Data 数据,然后从 Data 对象正确检测出了原图片类型。 目前,我们的代码可以检测出 jpeg(jpg), tiff,…

逻辑回归Logistic

回归 概念 假设现在有一些数据点&#xff0c;我们用一条直线对这些点进行拟合&#xff08;这条直线称为最佳拟合直线&#xff09;&#xff0c;这个拟合的过程就叫做回归。进而可以得到对这些点的拟合直线方程。 最后结果用sigmoid函数输出 因此&#xff0c;为了实现 Logisti…

K8S自动化运维容器化(Docker)集群程序

K8S自动化运维容器化集群程序 一、K8S概述1.什么是K8S2.为什么要用K8S3.作用及功能 二、K8S的特性1.弹性伸缩2.自我修复3.服务发现和负载均衡4.自动发布和回滚5.集中化配置管理和秘钥管理6.存储编排7.任务批量处理运行 三、K8S的集群架构1.架构2.模式3.工作4.流程图 四、K8S的核…

如何解决vue3.0+typescript项目提示找不到模块“./App.vue

一、解决方案如下&#xff1a;需在项目目录下加上下面这段代码即可&#xff01;如果没有vite-env.d.ts目录需要继续往下看 declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<{}, {}, any>export default vueCompon…

TBOX开发需求说明

TBOX功能需求&#xff1a; 支持4G上网功能&#xff0c;可获取外网IP&#xff0c;可和云端平台连通支持路由功能&#xff0c;支持计算平台、网关和云端平台建立网络连接支持USB转网口&#xff0c;智能座舱会通过USB连接AG35建立网络连接&#xff08;类似IVI通过USB口连接TBOX&a…

前端面试中Vue的有经典面试题二

7. Vue中给data中的对象属性添加一个新的属性时会发生什么&#xff0c;如何解决&#xff1f; 示例&#xff1a; 点击button会发现&#xff0c; obj.b 已经成功添加&#xff0c;但是视图并未刷新&#xff1a; 原因在于在Vue实例创建时&#xff0c; obj.b 并未声明&#xff0c;因…

SQL求解用户连续登录天数

数据分析面试过程中&#xff0c;一般都逃不掉对SQL的考察&#xff0c;可能是笔试的形式&#xff0c;也可能是面试过程中面试官当场提问&#xff0c;当场在纸上写出&#xff0c;或者简单说一下逻辑。 今天&#xff0c;就来分享一道面试中常常被问到的一类SQL问题&#xff1a;连…

推荐个一行代码的Python可视化神器

学过Python数据分析的朋友都知道&#xff0c;在可视化的工具中&#xff0c;有很多优秀的三方库&#xff0c;比如matplotlib&#xff0c;seaborn&#xff0c;plotly&#xff0c;Boken&#xff0c;pyecharts等等。这些可视化库都有自己的特点&#xff0c;在实际应用中也广为大家使…

在springboot中配置mybatis(mybatis-plus)mapper.xml扫描路径的问题

我曾经遇到过类似问题&#xff1a; mybatis-plus的mapper.xml在src/main/java路径下如何配置pom.xml和application.yml_idea 把mapper文件放到java下如何配置_梓沂的博客-CSDN博客 当时只是找到解决问题的办法&#xff0c;但对mybatis配置来龙去脉并未深入了解&#xff0c;所…

操作系统备考学习 day1 (1.1.1-1.3.1)

操作系统备考学习 day1 计算机系统概述操作系统的基本概念操作系统的概念、功能和目标操作系统的四个特征并发共享虚拟异步 操作系统的发展和分类操作系统的运行环境操作系统的运行机制 年初做了一个c的webserver 的项目&#xff0c;在学习过程中已经解除部分操作系统的知识&am…

解决Debian系统通过cifs挂载smb后,中文目录乱码问题

解决Debian系统通过cifs挂载smb后&#xff0c;中文目录乱码问题 //$smb_server/share /mnt/nas_share cifs credentials/root/.smbcredentials,iocharsetutf8 0 0默认通过以上命令挂载smb&#xff0c;但是在查看文件目录时&#xff0c;中文乱码 解决问题方式&#xff1a; de…

C语言——指针基本语法

概述 内存地址 在计算机内存中&#xff0c;每个存储单元都有一个唯一的地址(内存编号)。 通俗理解&#xff0c;内存就是房间&#xff0c;地址就是门牌号 指针和指针变量 指针&#xff08;Pointer&#xff09;是一种特殊的变量类型&#xff0c;它用于存储内存地址。 指针的实…

iOS脱壳之frida-ios-dump

frida-ios-dump介绍 该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件&#xff0c;适合现iOS11版本之后的越狱手机使用。 下载 https://github.com/AloneMonkey/frida-ios-dump环境安装 电脑环境安装 win和Mac 环境一样都是…

美创科技一体化智能化公共数据平台数据安全建设实践

公共数据是当今政府数字化转型的关键要素和未来价值释放的核心锚点&#xff0c;也是“网络强国”、“数字中国”的战略性资源。 作为数字化改革先行省份&#xff0c;近年来&#xff0c;浙江省以一体化智能化公共数据平台作为数字化改革的支撑总平台&#xff0c;实现了全省公共数…

基于Vue前端框架构建BI应用程序

一、什么是Vue&#xff1f; Vue&#xff08;Vue.js&#xff09;是一个轻量级、高性能、可组件化的MVVM库。简而言之&#xff0c;是一个构建数据驱动的web界面的渐进式框架。它采用MVVM思想&#xff0c;通过数据双向绑定实现数据的动态渲染&#xff0c;同时也支持组件化的开发方…

gitee上传本地项目bug

&#x1f92e;这个破bug不知道浪费了多长时间&#xff0c;以前没有记录&#xff0c;每次都忘记&#xff0c;这次记下来 问题描述 gitee创建仓库&#xff0c;然后根据它提示的如下命令&#xff0c;但一直报错 原因分析&#xff1a; 把命令复制出来&#xff0c;粘贴到Sublime …

Centos误删系统自带python2.7,yum报错恢复方法

使用wget分别下载python以及yum的rpm包 资源地址如下&#xff1a; http://vault.centos.org mkdir /usr/local/src/pythoncd /usr/local/src/pythonwget http://vault.centos.org/7.6.1810/os/x86_64/Packages/python-backports-1.0-8.el7.x86_64.rpmwget ht…

PostgreSQL分区表

什么是分区表 数据库分区表将表数据分成更小的物理分片&#xff0c;以此提高性能、可用性、易管理性。分区表是关系型数据库中比较常见的对大表的优化方式&#xff0c;数据库管理系统一般都提供了分区管理&#xff0c;而业务可以直接访问分区表而不需要调整业务架构&#xff0c…

C++ 动态内存

C 程序中的内存分为栈和堆两个部分&#xff1a; 栈&#xff1a;在函数内部声明的所有变量都将占用栈内存&#xff1b;堆&#xff1a;这是程序中未使用的内存&#xff0c;在程序运行时可用于动态分配内存。 堆与栈的详细请参考&#xff1a;一文读懂堆与栈的区别_堆和栈的区别_恋…

[二分查找] 旋转数组

1. &#xff08;严格递增序列&#xff09;旋转数组的元素查找 简单来说分为三种情况进行分析 1. 整个旋转数组单调递增 根据x和A[mid]的大小关系&#xff0c;更迭范围。 // 1. 整个旋转数组单调递增if (A[left]<A[right]){if (A[mid] x)return mid;else if (x < A[mid]…