c++笔记

下面给你整理一份 Markdown 格式的 C++ 竞赛速成笔记,可以直接复制到 Typora / VSCode 等编辑器里使用,非常清晰易读。


📘 C++ 竞赛速成笔记(Markdown 版)


#️⃣ 目录


📌 万能头文件

#include <bits/stdc++.h>
using namespace std;

📌 输入与输出

基本类型

int a;
long long b;
string s;

cin >> a >> b >> s;
cout << a << " " << b << " " << s << "\n";

📌 读取整行与分割

读取一整行(包括空格)

string line;
getline(cin, line);

如果前面用过 cin >>

cin.ignore();
getline(cin, line);

按空格拆分字符串

string line;
getline(cin, line);

stringstream ss(line);
string token;
vector<string> parts;

while (ss >> token) {
    parts.push_back(token);
}

📌 数组与容器

vector 一维数组

vector<int> v(n);
for (int i = 0; i < n; i++)
    cin >> v[i];

vector 二维数组

vector<vector<int>> a(n, vector<int>(m));

📌 排序 sort

从小到大

sort(v.begin(), v.end());

从大到小

sort(v.begin(), v.end(), greater<int>());

📌 自定义排序 cmp

排结构体

struct Node {
    int x, y;
};

bool cmp(const Node &a, const Node &b) {
    if (a.x != b.x) return a.x < b.x;
    return a.y > b.y;
}

sort(v.begin(), v.end(), cmp);

📌 map / unordered_map

统计频率

unordered_map<string, int> mp;
mp["hello"]++;

📌 set / unordered_set

unordered_set<int> st;
st.insert(10);

if (st.count(10)) {
    cout << "exists";
}

📌 优先队列(堆)

最大堆

priority_queue<int> pq;
pq.push(5);
pq.push(10);
cout << pq.top(); // 10

最小堆

priority_queue<int, vector<int>, greater<int>> pq;

📌 字符串与数字转换

int x = stoi("123");
long long y = stoll("12345");
string s = to_string(10086);

📌 字符判断与转换

isdigit(c);
isalpha(c);
islower(c);
isupper(c);
tolower(c);
toupper(c);

📌 前缀和模板(重要)

一维前缀和

vector<int> pre(n+1, 0);
for (int i = 1; i <= n; i++)
    pre[i] = pre[i-1] + a[i];

区间和查询

int sum = pre[r] - pre[l-1];

📌 EOF 输入处理(不确定行数时)

按词读取

string s;
while (cin >> s) {
    // process
}

按行读取

string line;
while (getline(cin, line)) {
    // process
}

📌 快速 IO

ios::sync_with_stdio(false);
cin.tie(nullptr);

🧩 比赛通用模板(直接用)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    vector<int> v(n);
    for (int i = 0; i < n; i++)
        cin >> v[i];

    sort(v.begin(), v.end());

    for (int x : v)
        cout << x << " ";
    cout << "\n";

    return 0;
}

🎁 如果你愿意,我可以给你:

✔ 字符串处理专题模板

✔ 排序 + 自定义 cmp 专题

✔ BFS / DFS 专题

✔ DP 常用模板(背就能用)

✔ 贪心常见套路总结

只要告诉我你比赛偏什么类型,我会直接给你针对性模板

posted @ 2025-12-06 17:59  学java的阿驴  阅读(18)  评论(0)    收藏  举报