C++语法

C++简介

C++是一种静态类型的,大小写敏感,支持过程化编程,面相对象编程和泛型编程。

标准库

  1. 核心语言
  2. c++标准库
  3. 标准模板库(STL)

经典Hallow world

1
2
3
4
5
6
# include<iostream>
using namespace std;
int main(){
cont <<"Hellow World"<< endl;//输出Hallow World
return 0
}

可以使用”/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 v = {1, 2, 3};
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 s = {1, 2, 3};

在使用了using namespace std告诉编辑器我们将要使用空间std中的函数或者对象后,使用时可以省略std::

自动类型推导

auto是 C++11 正式引入的类型自动推导关键字(C++14/17 进一步扩展),核心作用是:
让编译器根据变量的初始化表达式自动推导变量的类型,无需程序员手动指定类型。
使用场景

int>> complex_vec;
1
2
// 手动写类型:vector<unordered_map<string, int>>::iterator
auto it = complex_vec.begin(); // auto 自动推导为上述迭代器类型,简洁!

也可以搭配&来获取地址

常用写法

vector容器

属于标准库中,用于存储同一类型的元素集合,内存连续,可随机访问,比普通数组更灵活,并且支持动态扩容
示例:vector<int> nums

数组操作

定义type arrayName [ arraySize ];
获取元素个数
非参数数组 sizeof(a)/sizeof(a[0])
参数数组 ````
C++11 简化写法 库有size()方法

vector的遍历

for (int val : vector) {

}
函数使用可用 vector<int>& nums仅获取地址不复制

cout

必须先包含头文件 ,并且要么使用 std::cout(推荐)
cout输出是以流式输出

  1. 单变量输出
    cout << "变量值:" << num << endl;

  2. 循环数组输出

    (int i
    1
    2
    3
        cout << arr[i] << " ";
    }
    cout << endl;
  3. vector输出(范围for更简洁)

vec
1
2
3
4
cout << "vector vec:";
for (int val : vec) {
cout << val << " ";
}

字符串操作

sort()按照大小重排

哈希表unordered_map

哈希表定义
unordered_map<int,int> num_map;

哈希表操作

  1. 下标赋值法 哈希表变量名[键] = 值;
    num_map[nums[i]] = i;
    如果键不存在,会自动在哈希表中插入这个「键值对」;如果键已存在,会覆盖原有值。

  2. insert() 方法
    哈希表变量名.insert({键, 值});
    仅当键不存在时插入,键已存在则不会覆盖,返回插入结果(成功 / 失败)。

  3. find() 方法查找
    哈希表名.find(键)
    返回指向该键值对的迭代器,如果键不存在,返回哈希表的「尾后迭代器」(end ())

    查找对应键的数据,没找到就返回end()
    if (num_map.find(complement) != num_map.end())

  4. erase()删除
    num_map.earse(1)删除键为1的元素

  5. 哈希表的遍历

target_key;
1
2
3
4
5
6
7
8
9
10
    for (auto& pair : score_map) {
if (pair.second == target_value) {
target_key = pair.first;
break;
}
}```

### 循环
#### for循环
示例

for (int i = 1; i <= 5; i++) {
cout << “i = “ << i << endl;
}