C++头文件
#include <iostream>
using namespace std;
// 万能头
#include <bits/stdc++.h>
using namespace std;
using namespace std;
// 万能头
#include <bits/stdc++.h>
using namespace std;
交换函数
swap(a, b):交换两个变量的值
C++基本数据类型
- 整型:短整型(short)、基本整型(int)、长整型(long long)
- 浮点型:单精度(float)、双精度(double)、扩展双精度(long double)
(默认输出精度为6位有效数字) - 其他:字符型(char)、布尔型(bool)
信息的单位
- 1 byte = 8 bit
- 1 KB = 1024 byte
- 1 MB = 1024 KB
- 1 GB = 1024 MB
- 1 TB = 1024 GB
变量存储空间大小计算
sizeof(变量名):返回变量所占字节数
逻辑运算符
!:逻辑非&&:逻辑与||:逻辑或
运算符优先级(从高到低)
- 逻辑非运算符:
! - 算术运算符:
+ - * / % - 关系运算符:
> >= < <= == != - 逻辑与运算符:
&& - 逻辑或运算符:
|| - 赋值运算符:
= += -= *= /= %= - 长度运算符:
sizeof
常量定义
const 类型 变量名 = 值; // 格式
内存拷贝函数 memcpy
memcpy(b, a, sizeof(a)):复制数组a的所有数据到数组bmemcpy(b, a, sizeof(int) * k):复制数组a的前k个元素到bmemcpy(b, a, sizeof(double)):复制双精度浮点数数组- 需要头文件:
#include <cstring>
Map 容器
ma[ ]:访问元素,若不存在则创建并初始化为0ma.size():返回元素个数ma.count(element):判断元素是否存在(返回1或0)ma.clear():清空mapma.lower_bound():返回键值 ≥ 给定元素的第一个位置ma.erase(it):删除迭代器指向的元素ma.erase(key):删除指定键的元素ma.erase(it, ma.end()):删除一段区间
second << endl;">
map<KeyType, ValueType>::iterator it; // 声明迭代器
cout << it->first << ":" << it->second << endl;
cout << it->first << ":" << it->second << endl;
二分查找函数
lower_bound(first, last, val):返回第一个 ≥ val 的位置upper_bound(first, last, val):返回第一个 > val 的位置binary_search(first, last, val):二分查找,找到返回true
注意:序列必须是非递减的(通常先排序)
去重函数 unique
unique(first, last):去除相邻重复元素(只保留一个),通常先sort
sort(first, last); // 先排序
auto new_end = unique(first, last);
container.erase(new_end, last); // 删除重复元素
auto new_end = unique(first, last);
container.erase(new_end, last); // 删除重复元素
文件操作
ifstream:从文件读取数据ofstream:向文件写入数据
#include <fstream>
ifstream infile("文件名");
ofstream outfile("文件名");
ifstream infile("文件名");
ofstream outfile("文件名");
字符串操作
count(s.begin(), s.end(), '0'):统计字符个数s.insert(pos, s2):在pos位置插入字符串s.erase(pos, len):删除从pos开始的len个字符s.substr(pos, len):截取子串s.find(s2, pos):从pos开始查找s2第一次出现的位置getline(cin, s):读取一行(包含空格)s.length():返回字符串长度reverse(s.begin(), s.end()):翻转字符串
集合 set
set<int> a:新建一个整数集合a.insert(b):插入元素a.size():集合大小a.clear():清空集合
杂学笔记
next_permutation(first, last):生成下一个排列(按字典序)
do {
// 处理当前排列
} while(next_permutation(first, last));
// 处理当前排列
} while(next_permutation(first, last));
DFS 深度优先搜索(模板)
// 模板一
void dfs(当前状态) {
if(到达终点) { 记录结果; return; }
for(所有可能的选择) {
if(选择合法) {
标记当前选择;
dfs(下一层状态);
撤销标记;
}
}
}
// 模板二
int search(int k) {
if(到目的地) 输出解;
else
for(int i=1; i<=算符总数; i++)
if(满足条件) {
保存结果;
search(k+1);
恢复状态; // 回溯
}
}
void dfs(当前状态) {
if(到达终点) { 记录结果; return; }
for(所有可能的选择) {
if(选择合法) {
标记当前选择;
dfs(下一层状态);
撤销标记;
}
}
}
// 模板二
int search(int k) {
if(到目的地) 输出解;
else
for(int i=1; i<=算符总数; i++)
if(满足条件) {
保存结果;
search(k+1);
恢复状态; // 回溯
}
}
BFS 广度优先搜索(模板)
// BFS 广度优先搜索模板
int bfs() {
初始化,初始状态存入队列;
队列首指针 head=0; 尾指针 tail=1;
do {
指针head后移一位,指向待扩展结点;
for(int i=1; i<=max; i++) {
if(子节点符合条件) {
tail指针增1,把新结点存入列尾;
if(新节点与原已产生节点重复) 删去该节点 (取消入队,tail减一);
else {
if(新节点是目标节点) 输出并退出;
}
}
}
} while(head < tail); // 队列为空
}
int bfs() {
初始化,初始状态存入队列;
队列首指针 head=0; 尾指针 tail=1;
do {
指针head后移一位,指向待扩展结点;
for(int i=1; i<=max; i++) {
if(子节点符合条件) {
tail指针增1,把新结点存入列尾;
if(新节点与原已产生节点重复) 删去该节点 (取消入队,tail减一);
else {
if(新节点是目标节点) 输出并退出;
}
}
}
} while(head < tail); // 队列为空
}
栈 stack
stack<数据类型> 栈名;:声明一个栈push(x):将 x 压入栈顶,时间复杂度 O(1)top():获取栈顶元素,时间复杂度 O(1)pop():弹出栈顶元素(无返回值),时间复杂度 O(1)empty():检测栈是否为空,空返回 true,否则 false,时间复杂度 O(1)size():返回栈内元素个数,时间复杂度 O(1)
stack<数据类型> 栈名; // 声明
栈名.push(元素);
元素 = 栈名.top(); // 取栈顶
栈名.pop(); // 弹出
if(!栈名.empty()) {
cout << 栈名.size();
}
栈名.push(元素);
元素 = 栈名.top(); // 取栈顶
栈名.pop(); // 弹出
if(!栈名.empty()) {
cout << 栈名.size();
}
队列 queue
queue<数据类型> 变量名;:声明一个队列empty():检测队列是否为空,空返回 true,否则 falsepop():出队,删除队首元素(无返回值)push(val):入队,将 val 加入到队列末尾front():获取队头元素,但不删除back():获取队尾元素,但不删除size():返回当前队列中的元素数目
queue<数据类型> 队列名; // 声明
队列名.push(元素);
元素 = 队列名.front(); // 取队首
元素 = 队列名.back(); // 取队尾
队列名.pop(); // 出队
if(!队列名.empty()) {
cout << 队列名.size();
}
队列名.push(元素);
元素 = 队列名.front(); // 取队首
元素 = 队列名.back(); // 取队尾
队列名.pop(); // 出队
if(!队列名.empty()) {
cout << 队列名.size();
}
📋 更新日志 (2026-07-20) — 去除示例数据,保留纯模板
✨ 本次更新
- 去除所有具体示例数据:所有代码块和列表项均改为通用语法模板,不再包含具体数值、文件名或具体数组初始化,便于直接复制使用。
- 保留完整的 C++ 笔记内容:涵盖基础语法、STL 容器、常用算法、DFS/BFS 模板、stack/queue 操作等。
- 一键复制功能:单击任意条目即可复制纯文本模板,方便粘贴到编辑器。
最后更新时间:2026年7月20日 | My Note,LTD