Menu
CoddyTech

C++ 速查表

最后更新

Hello World 和程序结构

程序从 main 开始执行,它返回一个 int。

元素代码
引入头文件#include <iostream>
程序入口int main() { ... }
打印一行std::cout << "Hello, World!" << std::endl;
读取输入std::cin >> x;
使用 std 命名空间using namespace std;
返回成功return 0;
注释// line 和 /* block */

数据类型

类型说明
int整数(通常为 32 位)
long / long long更宽的整数
float / double浮点数
char单字节 / 字符
booltrue 或 false
std::string来自 <string> 的动态文本
auto由编译器推断类型
std::size_t表示大小和索引的无符号类型

变量和引用

引用是别名,指针保存的是地址。

操作语法
声明并初始化int x = 5;
花括号初始化int x{5};
常量const double PI = 3.14159;
编译期常量constexpr int N = 10;
引用(别名)int &r = x;
指针int *p = &x;
解引用指针*p = 10;
类型推断auto y = 3.14;

控制流程

语句语法
if / elseif (x > 0) { ... } else { ... }
switchswitch (n) { case 1: ...; break; default: ...; }
while 循环while (i < n) { ... }
do-while 循环do { ... } while (i < n);
for 循环for (int i = 0; i < n; i++) { ... }
范围 for 循环for (auto x : vec) { ... }
按引用的范围 for 循环for (auto &x : vec) { ... }
break / continuebreak; 退出循环,continue; 跳到下一次迭代

函数

操作语法
定义函数int add(int a, int b) { return a + b; }
无返回值void greet() { ... }
默认参数int pow(int b, int e = 2) { ... }
按引用传参void inc(int &x) { x++; }
const 引用(不复制)void print(const std::string &s) { ... }
函数重载int max(int a, int b); 和 double max(double a, double b);
Lambda 表达式auto f = [](int x) { return x * 2; };
带捕获的 Lambdaauto g = [n](int x) { return x + n; };

类和面向对象

操作语法
定义类class Dog { ... };
访问修饰符public:, private:, protected:
成员变量std::string name;
构造函数Dog(std::string n) : name(n) {}
析构函数~Dog() { ... }
成员函数void bark() { ... }
创建对象Dog d("Rex");
继承class Puppy : public Dog { ... };
虚函数virtual void speak();

STL 容器

标准库中的常用容器。

容器用途和示例
std::vector<int>动态数组:v.push_back(1); v.size();
std::string文本:s += "!"; s.length();
std::array<int, 3>带边界信息的定长数组
std::map<K, V>有序键值对:m["a"] = 1;
std::unordered_map<K, V>哈希表(查找更快,无序)
std::set<T>有序且唯一的值:s.insert(5);
std::pair<A, B>一对值:make_pair(1, "x")
std::queue / std::stack先进先出队列 / 后进先出栈适配器

STL 算法和迭代器

来自 <algorithm>,大多数接收一对 begin/end 迭代器范围。

操作语法
起始 / 结束迭代器v.begin(), v.end()
排序std::sort(v.begin(), v.end());
降序排序std::sort(v.begin(), v.end(), std::greater<int>());
查找值auto it = std::find(v.begin(), v.end(), 5);
统计匹配个数std::count(v.begin(), v.end(), 5);
最小 / 最大元素std::max_element(v.begin(), v.end());
区间求和std::accumulate(v.begin(), v.end(), 0);
转换每个元素std::transform(v.begin(), v.end(), v.begin(), fn);

智能指针和现代 C++

优先使用智能指针而不是裸 new/delete,内存会自动清理。

特性语法
独占所有权auto p = std::make_unique<Dog>("Rex");
共享所有权auto p = std::make_shared<Dog>("Rex");
非拥有引用std::weak_ptr<Dog> w = p;
移动语义auto v2 = std::move(v1);
空指针 nullptrint *p = nullptr;
结构化绑定auto [key, val] = *it;
可选值std::optional<int> maybe;
模板template <typename T> T add(T a, T b) { return a + b; }

最常用的 C++ 语法、STL 容器和现代特性,全部放在一页上。这份 C++ 速查表是写 C++ 代码时的快速参考:数据类型、引用、类,vector 和 unordered_map 等标准库容器,以及取代裸 new/delete 的智能指针。

这里的内容都是标准 C++(C++11 及以后),可以用 g++ 或 clang++ 编译。复制你需要的代码,或者在 C++ 在线编辑器里直接运行任意代码片段,无需安装编译器。正在学这门语言?Coddy 的免费交互式 C++ 课程会一步步带你掌握指针、STL 和类。

C++ 速查表常见问题

这份 C++ 速查表免费吗?

免费。这份 C++ 速查表完全免费,无需注册。收藏起来,需要查语法、STL 容器或智能指针时随时回来看。

C++ 中指针和引用有什么区别?
指针是保存地址的变量:它可以为空,可以重新指向别处,用 *p 解引用。引用(int &r = x)是已有变量的别名:声明时必须绑定,永远不能为空,也不能重新绑定,用起来和变量本身一样。按引用传参时用引用更简洁;需要可选或可重新指向的间接访问时用指针。
应该用 new/delete 还是智能指针?
优先使用智能指针。std::unique_ptr 和 std::shared_ptr(通过 make_unique/make_shared 创建)在离开作用域时会自动释放内存,避免了手动 new/delete 带来的内存泄漏和重复释放。只有在有特殊理由的底层代码中,才使用裸 new/delete。
可以在线练习 C++ 吗?

可以。打开 C++ 在线编辑器,就能在浏览器里编译并运行这份速查表中的任意代码片段,无需安装编译器。如果你想系统学习,Coddy 的免费交互式 C++ 课程会一步步带你从变量和循环学到类和 STL。

这份速查表适合初学者吗?

适合。它从最常用的基础内容(类型、控制流程、函数)一直讲到进阶内容(STL 和智能指针),你第一天就能用上前面的部分,再慢慢掌握后面的内容。

Coddy 编程语言插图

在 Coddy 学习 C++

开始