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

【C++】基础语句(学习笔记)

一、分支

1、三种基本结构

  1. 顺序结构
  2. 分支结构
  3. 循环结构

2、if与switch对比

1)使用场景

  1. switch只支持常量值固定相等的分支判断
  2. if可以判断区间范围
  3. 用switch能做的,用if都能做

2)性能比较

  1. 分支少时,差别不是很大。分支多时,switch性能较高
  2. if开始处几个分支效果高,之后效率递减
  3. switch所有case的速度几乎一样

二、循环

for,do…while,while …

三、自定义类型

1、枚举

使用 #define 和const 创建符号常量

使用enum不仅能够创建符号常量,还能定义新的数据类型

enum wT(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
WT weekday;
weekday = Tuesday;

2、结构体和联合体

struct Student {char name[6];int age;Score s;
}union Score {double sc;char lever;
}

3、结构体数据对齐——缺省对齐原则

对于32位CPU:

  1. char:任何地址
  2. short:偶数地址
  3. int:4的整数倍地址
  4. double:8的整数倍地址

四、函数

1、函数概述

一个C++程序是由若干个源程序文件构成,而一个源程序是由若干个函数构成,函数将一段逻辑封装起来,便于复用

2、函数的组成

  1. 返回类型:一个函数可以返回一个值
  2. 函数名称:这是函数的实际名称
  3. 参数:参数列表包括函数参数的类型、顺序、数量。参数是可选的

3、函数重载

函数名和参数列表一起构成了函数签名

函数名相同但参数列表不同的函数为不同函数 --> 函数重载

4、函数指针与指针函数

每个函数都占用一段内存单元,它们有个起始地址,指向函数入口地址的指针称为函数指针

int(*p)(int);	//是指针,指向一个函数入口地址
int* p(int); 	//是函数,返回的值是一个指针

5、回调函数

int add(int a, int b) {return a + b;
}int reduce(int a, int b) {return a - b;
}void test(int a, int b, int(*pFunction)(int, int)) {cout << pFunction(a, b) << endl;
}int main() {test(10, 5, add);test(10, 5, reduce);
}

4、命名空间

命名空间作为附加信息来区分不同库中相同名称的函数、类、变量等,命名空间即定义了上下文。本质上,命名空间就是定义了一个范围

namespace rexhao {void test() {cout << "using namespace rexhao" << endl;}
}int main() {rexhao::test();return 0;
}

5、内联函数

内联函数:编译时,编译器会把该函数的代码副本放在每个调用该函数的地方

空间换时间,提高调用效率

inline int maxValue(int x,int y){return x > y ? x : y;
}

内联函数内部不能有太复杂的逻辑,编译器有时会有自己的优化策略,所以内联不一定起作用

6、递归

1)递归的四个基本法则

  1. 基准情形:无须递归就能解出
  2. 不断推进:每一次递归调用都必须使求解状況朝接近基准情形的方向推进
  3. 设计法则:假设所有的递归调用都能运行
  4. 合成效益法则(compound interest rule):求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作

2)递归的缺陷

递归是一种重要的编程思想,很多重要的算法都包含递归的思想

空间上需要开辟大量的栈空间、时间上可能需要有大量重复运算

3)递归的优化

  1. 尾递归:所有递归形式的调用都出现在函数的末尾
  2. 使用循环替代
  3. 使用动态规划,空间换时间
http://www.lryc.cn/news/184779.html

相关文章:

  • 大厂秋招真题【DP】米哈游20230924秋招T2-米小游与魔法少女-奇运
  • LVS+Keepalived 高可用集群负载均衡
  • Qt QList类和QLinkedList类 详解
  • Mac安装GYM遇到的一些坑
  • 【高级rabbitmq】
  • 数百个下载能够传播 Rootkit 的恶意 NPM 软件包
  • SpringBoot的error用全局异常去处理
  • MyBatisPlus(十一)包含查询:in
  • Linux命令定位与查找:which、whereis和find的用法详解
  • LeetCode 面试题 17.10. Find Majority Element LCCI【摩尔投票法】简单
  • 多校联测11 模板题
  • Linux SSH连接远程服务器(免密登录、scp和sftp传输文件)
  • 从0开始python学习-30.selenium frame子页面切换
  • asp.net core 远程调试
  • Java spring boot 一次调用多个请求
  • DRM全解析 —— CRTC详解(4)
  • 六个为Rust构建的IDE
  • 25 Python的collections模块
  • JEPG Encoder IP verilog设计及实现
  • yolov5 web端部署进行图片和视频检测
  • 嵌入式养成计划-34--函数库
  • PM864AK01-eA 3BSE018161R2 工业人工智能供应链先驱
  • 参与现场问题解决总结(Kafka、Hbase)
  • 基于PSD-ML算法的语音增强算法matlab仿真
  • 【1++的Linux】之文件(一)
  • Kafka 高可用
  • 关于分布式操作系统
  • Pytorch使用DataLoader, num_workers!=0时的内存泄露
  • chromedriver下载与安装方法
  • 数据库查询详解