1.常量

1.1 使用 const 将变量声明为常量

1
const double pi = 3.14;

1.2 使用 constexpr 定义常量表达式

1
2
constexpr double GetPi() {return 3.14;}
constexpr double TwicePi(){return 2* GetPi();}

1.3 使用关键字 enum 声明的枚举常量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<bits/stdc++.h>
using namespace std;
enum direct{
North=5,
South,
East,
West
};
int main()
{
direct f=North;
cout<<f<<endl;
cout<<South<<endl;
cout<<East<<endl;
cout<<West<<endl;
return 0;
}

out:
5
6
7
8

注:

1.使用枚举来指定变量的类型,这样声明的变量只能取指定的值

2.North的值设置为5,这自动将随后的常量分别设置为 6、7 和8。

1.4 使用#define 定义常量

1
#define pi 3.14

注:

1.#define 是一个预处理器宏,让预处理器将随后出现的所有 pi 都替换为 3.14。

2.使用#define 定义常量的做法已被摒弃,因此不应采用这种做法。

2.动态数组

std::vector:支持在运行阶段根据需要增大动态数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a(3);
a[0]=1,a[1]=2,a[2]=3;
printf("%d\n",a.size());
a.push_back(4);
printf("%d",a.size());
return 0;
}

out:
3
4

3.Lambda 表达式

[capture](parameters) -> return_type { body }

  • capture:捕获列表,用于指定在 lambda 表达式中可见的外部变量。可以通过值捕获或引用捕获来捕获变量。
  • parameters:参数列表,与普通函数的参数列表一样,用于传递参数给 lambda 表达式。
  • return_type:返回类型,指定 lambda 表达式的返回类型。可以省略,编译器会自动推断返回类型。
  • body:函数体,包含 lambda 表达式的实际操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<bits/stdc++.h>
using namespace std;
int main()
{
#lambda表达式接受两个整数参数x和y,然后返回它们的和
auto add=[](int x,int y)->int{
return x+y;
};
int ans=add(2,3);
printf("%d\n",ans);
int x=2,y=3;
#这个lambda表达式没有参数,并且在捕获列表中捕获了变量x和y,返回x*y的结果
auto mul=[x,y]()->int{
return x*y;
};
int res=mul();
printf("%d",res);
return 0;
}

4.动态内存分配

使用 new 动态地分配内存

1
2
Type* Pointer = new Type;
Type* Pointer = new Type[numElements];

最终都需使用对应的 delete 进行释放:

1
2
delete Pointer;
delete[] Pointer;
1
2
3
4
5
6
7
8
9
10
#include<bits/stdc++.h>
using namespace std;
int main()
{
int *x=new int;
scanf("%d",x);
printf("%d",*x);
delete x;
return 0;
}

5.将关键字 const 用于指针

5.1 地址不能修改,数据可修改

1
int* const pDaysInMonth = &daysInMonth;

5.2 地址可修改,数据不能修改

1
const int* pointsToInt = &hoursInDay;

5.3 地址和数据均不能修改

1
const int* const pHoursInDay = &hoursInDay;

6.共用体

共用体:可包含多个数据成员,但是只能使用其中的一个。

sizeof()用于共用体时,结果总是为共用体最大成员的长度,即便该成员并不处于活动状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<bits/stdc++.h>
using namespace std;
union Type
{
int num;
char p;
};
int main()
{
Type a;
a.num=1;
printf("num:%d\n",a.num);
a.p='x';
printf("p:%c\n",a.num,a.p);
printf("size:%d",sizeof(a));
return 0;
}

out:
num:1
p:x
size:4