本博文转载自 黑马程序员 的开源资料,只是为了方便自己学习,并非盗用他人成果!C++基础入门1 C++初识1.1 第一个 C++程序编写一个 C++程序总共分为 4 个步骤
创建项目
创建文件
编写代码
运行程序
1.1.1 创建项目 Visual Studio 是我们用来编写 C++程序的主要工具,我们先将它打开
1.1.2 创建文件右键源文件,选择添加->新建项
给 C++文件起个名称,然后点击添加即可。
1.1.3 编写代码1234567891011#include<iostream>using namespace std;int main() { cout << "Hello world" << endl; system("pause"); return 0;}
1.1.4 运行程序
1.2 注释作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码
两种格式
单行注释:// 描述信息
通常放在一行代码的上方,或者一条语句的末尾,= ...
本博文转载自 黑马程序员 的开源资料,只是为了方便自己学习,并非盗用他人成果!C++核心编程本阶段主要针对 C++==面向对象==编程技术做详细讲解,探讨 C++中的核心和精髓。
1 内存分区模型C++程序在执行时,将内存大方向划分为4 个区域
代码区:存放函数体的二进制代码,由操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
内存四区意义:
不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程
1.1 程序运行前 在程序编译后,生成了 exe 可执行程序,未执行该程序前分为两个区域
代码区:
存放 CPU 执行的机器指令
代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令
全局区:
全局变量和静态变量存放在此.
全局区还包含了常量区, 字符串常量和其他常量也存放在此.
...
本博文转载自 黑马程序员 的开源资料,只是为了方便自己学习,并非盗用他人成果!C++提高编程
本阶段主要针对 C++==泛型编程==和==STL==技术做详细讲解,探讨 C++更深层的使用
1 模板1.1 模板的概念模板就是建立通用的模具,大大提高复用性
例如生活中的模板
一寸照片模板:
PPT 模板:
模板的特点:
模板不可以直接使用,它只是一个框架
模板的通用并不是万能的
1.2 函数模板
C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板
C++提供两种模板机制:函数模板和类模板
1.2.1 函数模板语法函数模板作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
语法:
12template<typename T>函数声明或定义
解释:
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用 class 代替
T — 通用的数据类 ...
三分法用来解决单峰单谷问题,经典二次函数型的变化时,可以使用三分优化当问题是解决一堆都是整数的问题时,较为简单,模板代码如下:1234567891011121314151617181920#include <iostream>using namespace std;//下面就是要寻找的二次函数型数组,目标是找到其中的最大值int a[10] = { 0, 3, 25, 21, 20, 14, 12, 7, 2, 1 };int main(){ int z = 0, y = 9; while (z <= y) { //三分,就是将区间尽量平均分成三份 int mid1 = z + (y - z) / 3; int mid2 = y - (y - z) / 3; //判断两者中的较大值,那么较小值的一方的元素都不可能是最大值,直接舍去 if (a[mid1] >= a[mid2]) y = mid2 - 1; else z = mid1 + 1; } //最终结果位置与二分类似 cout < ...
二分(手搓)一.找出第一个大于等于 x 的元素1234567891011121314151617181920212223#include <iostream>#include <algorithm>using namespace std;int a[200005];int main(){ int n, x; cin >> n >> x; for (int i = 1; i <= n; i++) cin >> a[i]; int z = 1, y = n; //核心代码 while (z <= y) { //这里其实mid = (z + y) / 2,而下面的写法是为了防止有时候爆int int mid = z + (y - z) / 2; //下面两个条件判断,哪个不取等,就输出哪个 if (a[mid] >= x) y = mid - 1; else z = mid + 1; } cout << z; //cout << y + 1 ...
算法笔记
未读取余公式(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p ) % p
(a * b) % p = (a % p * b % p) % p
快速幂利用倍增思想,当求解 a 的 b 次方时,代码如下
12345678910111213141516171819202122232425262728#include <iostream>using namespace std;using ll = long long;ll quik_pow(ll a, ll b){ //temp存放 a^1, a^2, a^3, a^4....... ll temp = a; ll ans = 1; while (b) { //判断b的二进制的最后一位是否为1,是1就算入总结果 if (b & 1) ans = ans * temp; //随着b的二进制右移逐渐递变 temp = temp * temp; //b的二进制右移(舍弃最后一位 b >>= 1; & ...
题目12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <iostream>#include <queue>using namespace std;struct ty{ int z, y;}a[500005];int vis[500005];void xian(int f){ cout << f << ' '; if (a[f].z) xian(a[f].z); if (a[f].y) xian(a[f].y); return ;}void zhong (int f){ if (a[f].z) zhong(a[f].z); cout << f << ' '; if ( ...
由于 24 号正式开学,我在昨天晚上返校,从福建到湖北武汉,本一切顺利,但今天突然发现我的博客竟然上传博文的时候报错了?!!原因竟然是因为学校的防火墙阻断了我与 github 的 ssh,以下就是今天解决过程。
上传博文时出现如下图报错
在官网的常见报错中并没有找到对应的解决方法,之后上网查询得知:如果是在公司或学校网络,可能会存在防火墙或代理限制,阻止了 SSH 连接。
于是我在git bash中输入
1ssh -T git@github.com
出现报错如图所示
错误表明 SSH 连接被拒绝,通常是由于网络问题或 SSH 配置问题导致的。
这里更符合防火墙或代理限制,阻止了 SSH 连接(端口 22)的猜想。
于是开始尝试解决这个问题。
一.切换到 HTTPS 端口(443)GitHub 支持通过 HTTPS 端口(443)进行 SSH 连接。如果你的网络屏蔽了端口 22,可以尝试下面的方法(windows)
1.打开 SSH 配置文件:文件路径:C:\Users<你的用户名>.ssh\config。
如果文件不存在,可以手动创建
2.添加以下内容:123Host ...
八种排序三种 O(n ^ 2)的排序:冒泡,选择,插入
三种不基于比较的排序:桶,基数,计数
最后是:归并排序,快速排序
一.冒泡排序较简单,直接代码注释结合理解即可
1234567891011121314151617181920212223242526272829#include <iostream>using namespace std;int main(){ //给定乱序数组a int a[10] = { 1, 10, 4, 2, 3, 8, 5, 9, 7, 6 }; //这里令n = 10,方便给出通解 int n = 10; //两层循环,内层做从左到右遍历数组中未排序元素,并进行比较操作;外层每次去除已定序元素,限制下一次内循环排序范围。 //外循环一共循环n - 1次,因为每一次外循环结束可以定下一个元素的位置,到第n - 1次排序完成,就只剩下一个元素,自然不用再排序。 for (int i = 0; i < n - 1; i++) { //内循环 ...
大一寒假1 月 13 号晚上到家,寒假开始,返校车票是 2 月 22 号。然后今天是 2 月 19 号,去除明天开始的两天要去找我姐。整个寒假有 37 天,由于报名寒假集训,年前年后各有三场比赛。
年前,这段时间学习较无目的性,基本都是因为几天一场比赛,赛时写题,赛后补题,其余时间也得四处奔走聚会。
年时更是忙,走亲访友的,当然没有很好的学习节奏,但好在放假到年时,生活节奏较好,作息好,身体有所改善。
年后,又是要面对三场比赛,但除了打比赛,也开始重新学习算法,目前过完模拟,枚举,贪心,接下来就到递归。用手机延时摄影记录学习,并发布社交媒体,这样做好处好多!在学习过程中终于可以专心,没有再时不时停下玩手机,不仅提高效率,还有监督效果。整个寒假虽说不上努力,但至少代码没荒废,算法也有学习,同时解决了原博客服务器到期,还搞了新博客。当然也有遗憾的事,整个寒假的英语那真是一点没学啊,而且!我的半马没有中签!!!和我一起报名的朋友在二补时中了。。。酸了。
还有一件有趣的事情,在新年当天晚上,我才得知 deepseek 发布引动全球的事情,这 ai 实在是一言难尽,真的太强了,放寒假前我甚至还想 ...

