二分查找(Binary Search)简介二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它通过反复将数组分成两半,然后在其中一半中继续查找,直到找到目标元素或者确定目标元素不在数组中。
满足条件
数组必须有序。(a n-1 ≤ a n 或 a n-1 ≥ a n)
数组中每个元素必须可以随机访问。
数组的上限和下限必须是已知的。
数组有序是二分查找的基本条件,也是是否可以二分的重要依据,每个元素不一定是int类型,每个元素之间能够比较,数组能够排序就行。
为什么每个元素要能随机访问?
因为在二分过程中,我们要不断更新左边界指针,右边界指针和中间指针,每次更新都是访问数组里面的某个位置的元素。而链表,要想访问某一个元素,必须先要知道它的前继节点,所以在链表中,你要想遍历某个元素,就要不断遍历之前的节点(既然都遍历之前的元素了,顺便查找了不就行了吗?还用什么二分(/_\))。像链表、队列、栈等,这些不能随机访问的数据结构,都不能使用二分查找。
关于上限与下限
在某种特定的情况下,上限与下限是不容易确定的。只要自己设置的边界足够大(再大也不能 ...
驼峰命名法(Camel Case)驼峰命名法(CamelCase)是一种常见的编程中用于命名变量和函数的方法。它的特点如下:
首字母大小写:第一个单词的首字母大写或小写,后续单词的首字母大写。
无空格:单词之间没有空格,直接连接在一起。
无下划线:单词之间不用下划线连接。
驼峰命名法有两种变体:
小驼峰命名法(lowerCamelCase):第一个单词的首字母小写,后续单词的首字母大写。例如:myVariableName。
大驼峰命名法(UpperCamelCase):第一个单词的首字母也大写,后续单词的首字母大写。例如:MyVariableName。
驼峰命名法的优点包括:
简洁性:没有空格和下划线,使得代码看起来更加紧凑。
可读性:单词的分隔通过大小写变化来实现,提高了代码的可读性。
一致性:在许多编程语言和项目中,驼峰命名法被广泛使用,有助于保持代码风格的一致性。
C++文件规范关于头文件与源文件的命名
文件名与类名要保持一致:如果头文件中定义了一个类,那么文件名应该与类名一致。
文件名使用小写字母:通常建议使用小写字母来命名文件,因为大多数操作系统在文件系统中是大小写敏感的。
避免使用数字和特殊字符:文件名中应避免使用数字和特殊字符,因为它们可能会在不同的操作系统和环境中引起问题。
关于头文件与源文件后缀
头文件:C++的头文件有两种命名方式一种是.hpp ,另一种是.h 。
.h:C语言和C++语言中传统的头文件扩展名,它源自C语言。在C++中,.h扩展名仍然被广泛使用,尤其是在一些旧的代码库和跨平台的库中。
.hpp:C++特有的头文件扩展名,它被用来明确表示这是一个C++头文件,而不是C语言的头文件。.hpp扩展名的使用也是为了强调C++的面向对象特性和C++特有的语法。
源文件:C++的源文件只有.cpp 这一种命名方式。
头文件是用h还是hpp呢?
在实际使用中,.h和 .hpp 没有技术上的区别 ,它们都表示头文件。选择使用哪一个主要取决于个人或团队的编码风格、项目规范以及历史习惯。有些项目可能统一使用.hpp而有些项目则可能混 ...
CMake简介CMake是一个跨平台的自动化构建系统,它使用配置文件(称为CMakeLists.txt),这些文件定义了如何构建、测试和安装软件。CMake的主要目标是提供一种编写构建过程的方法,这种方法可以跨不同的编译器和操作系统工作,从而使得构建软件的过程更加一致和可移植。
以下是CMake的一些关键特性和用途:
跨平台支持:CMake可以生成多种编译器和平台的构建文件,如Unix的Makefiles、Windows的Visual Studio工程文件、Xcode项目文件等。
模块化:CMake使用模块化的设计,允许开发者重用代码和设置。
依赖管理:CMake可以自动处理库依赖关系,包括自动查找和链接第三方库。
测试框架:CMake内置了CTest,这是一个测试驱动程序,可以轻松地集成到构建过程中。
安装规则:CMake允许开发者定义安装规则,使得软件可以被安装到系统上。
变量和条件逻辑:CMake提供了丰富的变量和条件逻辑,使得构建过程可以根据不同的配置和平台进行调整。
生成自定义构建目标:CMake允许开发者定义自定义的构建目标,比如生成文档、打包软件等。
命令 ...
C++项目文件目录C++项目要根据具体情况来确定文件目录结构,并不是一成不变的,设计良好的文件结构有助于提高项目的可维护性、可扩展性和开发效率,因此,根据项目的具体需求和上下文来设计合适的文件结构是非常重要的。下面是一种项目常用文件目录:
bin目录:存放编译后的可执行文件,bin目录的使用可以让用户方便地找到和运行项目的可执行程序。
bulid目录:通常用于存放编译过程中产生的所有中间文件,例如对象文件(.o或.obj)、依赖文件、库文件等。使用 build 目录的好处是它可以保持源代码目录的清洁,所有的构建产物都不会污染源代码树。
examples目录:提供一些简单的示例代码,展示如何使用项目的主要功能。
lib目录:将项目所依赖的外部静态库( .a )或动态库( .so 或 .dll )放在这里。
include目录:用于存放项目的头文件(.h或.hpp),将头文件集中放在这个目录,方便管理和维护代码的接口部分,使得其他代码可以方便地找到所需的声明。
src目录: 主要放置源文件(.cpp)。这里是函数和类的具体实现代码所在地。源文件通过包含include目录中的头文件来 ...
C++项目教程
未读目录
C++项目教程—前言
C++项目准备工作
C++代码编程规范
C++项目构建工具——CMake
版本控制系统