C++学习笔记
C++语法
C++简介
C++是一种静态类型的,大小写敏感,支持过程化编程,面相对象编程和泛型编程。
标准库
- 核心语言
- c++标准库
- 标准模板库(STL)
经典Hallow world
1 | # include<iostream> |
可以使用”/n”来替代endl’
程序结构
头文件
#include
using namespace std是选择std命名空间 告诉编辑器我们将要使用空间std中的函数或者对象。
int main()同C语言,主函数入口
return 0 程序结束
结束符 为;
注释
单行注释//
多行注释/* */
数据类型
基本的内置类型
| 类型 | 关键字 |
|---|---|
| 布尔型 | bool |
| 字符型 | char |
| 整型 | int |
| 浮点型 | float |
| 双浮点型 | double |
| 无类型 | void |
| 宽字符型 | wchar_t |
派生数据类型
| 数据类型 | 描述 | 示例 |
|---|---|---|
| 数组 | 相同类型元素的集合 | int arr[5] = {1, 2, 3, 4, 5}; |
| 指针 | 存储变量内存地址的类型 | int* ptr = &x; |
| 引用 | 变量的别名 | int& ref = x; |
| 函数 | 函数类型,表示函数的签名 | int func(int a, int b); |
| 结构体 | 用户定义的数据类型,可以包含多个不同类型的成员 | struct Point { int x; int y; }; |
| 类 | 用户定义的数据类型,支持封装、继承和多态 | class MyClass { … }; |
| 联合体 | 多个成员共享同一块内存 | union Data { int i; float f; }; |
| 枚举 | 用户定义的整数常量集合 | enum Color { RED, GREEN, BLUE }; |
标准库变量
| 数据类型 | 描述 | 示例 |
|---|---|---|
| std::string | 字符串类型 | std::string s = “Hello”; |
| std::vector | 动态数组 | std::vector |
| std::array | 固定大小数组(C++11 引入) | std::array<int, 3> a = {1, 2, 3}; |
| std::pair | 存储两个值的容器 | std::pair<int, float> p(1, 2.0); |
| std::map | 键值对容器 | std::map<int, std::string> m; |
| std::set | 唯一值集合 | std::set |
在使用了using namespace std告诉编辑器我们将要使用空间std中的函数或者对象后,使用时可以省略std::
自动类型推导
auto是 C++11 正式引入的类型自动推导关键字(C++14/17 进一步扩展),核心作用是:
让编译器根据变量的初始化表达式自动推导变量的类型,无需程序员手动指定类型。
使用场景
1 | // 手动写类型:vector<unordered_map<string, int>>::iterator |
也可以搭配&来获取地址
常用写法
vector容器
属于标准库中,用于存储同一类型的元素集合,内存连续,可随机访问,比普通数组更灵活,并且支持动态扩容
示例:vector<int> nums
数组操作
定义type arrayName [ arraySize ];
获取元素个数
非参数数组 sizeof(a)/sizeof(a[0])
参数数组 ````
C++11 简化写法
vector的遍历
for (int val : vector) {
}
函数使用可用 vector<int>& nums仅获取地址不复制
cout
必须先包含头文件
cout输出是以流式输出
单变量输出
cout << "变量值:" << num << endl;循环数组输出
(int i 1
2
3cout << arr[i] << " ";
}
cout << endl;vector输出(范围for更简洁)
1 | cout << "vector vec:"; |
字符串操作
sort()按照大小重排
哈希表unordered_map
哈希表定义 unordered_map<int,int> num_map;
哈希表操作
下标赋值法 哈希表变量名[键] = 值;
num_map[nums[i]] = i;
如果键不存在,会自动在哈希表中插入这个「键值对」;如果键已存在,会覆盖原有值。insert() 方法
哈希表变量名.insert({键, 值});
仅当键不存在时插入,键已存在则不会覆盖,返回插入结果(成功 / 失败)。find() 方法查找
哈希表名.find(键)
返回指向该键值对的迭代器,如果键不存在,返回哈希表的「尾后迭代器」(end ())查找对应键的数据,没找到就返回end()
if (num_map.find(complement) != num_map.end())erase()删除
num_map.earse(1)删除键为1的元素哈希表的遍历
1 | for (auto& pair : score_map) { |
for (int i = 1; i <= 5; i++) {
cout << “i = “ << i << endl;
}


