【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. 使用动态规划,空间换时间

你可能感兴趣的:(c++,学习,笔记)