【蓝桥杯】——>STL、基本数学

C++ 基础语法与 STL 速查手册


🧠 基础语法

变量声明

cpp 复制代码
int a = 5;          // 整数
double b = 3.14;    // 浮点数
char c = 'A';       // 字符
bool flag = true;   // 布尔
string s = "hello"; // 字符串

数组

cpp 复制代码
int arr[10];              // 静态数组
int arr2[] = {1,2,3};     // 初始化
vector<int> v(10);        // 动态数组
vector<int> v2 = {1,2,3}; // 初始化

循环

cpp 复制代码
// for循环
for(int i = 0; i < 10; i++) {}

// for-each
for(int x : v) {}

// while
while(condition) {}

条件语句

cpp 复制代码
if (condition) {
    // do something
} else if (condition2) {
    // do something else
} else {
    // default
}

🧰 STL 常用容器

1. vector(动态数组)

cpp 复制代码
vector<int> v = {1,2,3};
v.push_back(4);      // 添加元素
v.pop_back();        // 删除末尾
v.size();            // 大小
v[0];                // 访问
v.clear();           // 清空
v.empty();           // 是否为空

2. string(字符串)

cpp 复制代码
string s = "hello";
s += " world";       // 拼接
s.substr(0, 5);      // 子串
s.find("ell");       // 查找
s.length();          // 长度
reverse(s.begin(), s.end()); // 反转

3. queue(队列)

cpp 复制代码
queue<int> q;
q.push(1);           // 入队
q.pop();             // 出队
q.front();           // 队首
q.back();            // 队尾
q.empty();           // 是否为空

4. stack(栈)

cpp 复制代码
stack<int> st;
st.push(1);          // 入栈
st.pop();            // 出栈
st.top();            // 栈顶
st.empty();          // 是否为空

5. set(有序集合)

cpp 复制代码
set<int> se;
se.insert(1);        // 插入
se.erase(1);         // 删除
se.count(1);         // 是否存在
se.find(1);          // 查找迭代器
se.clear();          // 清空

6. map(键值对)

cpp 复制代码
map<string, int> mp;
mp["key"] = 100;     // 插入/修改
mp.count("key");     // 是否存在
mp.erase("key");     // 删除
mp.clear();          // 清空

7. priority_queue(优先队列)

cpp 复制代码
priority_queue<int> pq;           // 大根堆
priority_queue<int, vector<int>, greater<int>> pq2; // 小根堆
pq.push(1);          // 插入
pq.pop();            // 弹出最大
pq.top();            // 最大元素

🛠️ STL 算法

排序与查找

cpp 复制代码
sort(v.begin(), v.end());           // 升序排序
sort(v.begin(), v.end(), greater<int>()); // 降序
reverse(v.begin(), v.end());        // 反转
unique(v.begin(), v.end());         // 去重(相邻)
binary_search(v.begin(), v.end(), x); // 二分查找
lower_bound(v.begin(), v.end(), x);   // 下界
upper_bound(v.begin(), v.end(), x);   // 上界

数值操作

cpp 复制代码
max(a, b);           // 最大值
min(a, b);           // 最小值
swap(a, b);          // 交换
abs(x);              // 绝对值
gcd(a, b);           // 最大公约数(C++17)

容器操作

cpp 复制代码
fill(v.begin(), v.end(), 0);       // 填充
count(v.begin(), v.end(), x);      // 计数
find(v.begin(), v.end(), x);       // 查找
next_permutation(v.begin(), v.end()); // 下一排列

📋 实用技巧

类型别名

cpp 复制代码
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;

常用宏

cpp 复制代码
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()

输入输出

cpp 复制代码
cin >> x;            // 输入
cout << x;           // 输出
printf("%.2f\n", x); // 格式化输出
scanf("%d", &x);     // C风格输入

🎯 竞赛常用模板

完整头文件

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;

常用初始化

cpp 复制代码
vector<int> v(n, 0);     // n个0
int arr[1005] = {0};     // 清零
fill(arr, arr + n, 0);   // 数组填充

🚀 性能提示

操作 时间复杂度 备注
vector::push_back O(1)均摊 动态扩容
set::insert O(log n) 有序
map::find O(log n) 红黑树
unordered_map::find O(1)平均 哈希表

二、最大公约数和最小公倍数

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int gcd(int a, int b){
	return (b==0)?a:gcd(a,a%b);
}

//两个数最大公约数和最小公倍数的乘积等于两数之积 
int lcm(int a, int b){
	return a / gcd(a,b) * b;//防止a*b溢出 
}

int main(){
	int a,b;cin>>a>>b;
	cout<<gcd(a,b)<<'\n';
	cout<<lcm(a,b)<<'\n';
	return 0;
}

三、埃氏筛和欧拉筛

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e7 +5; 
bool is_prime[N];

//埃氏筛质数 
void AS_sieve(int n){
	fill(is_prime,is_prime+n+1,true);
	is_prime[0] = is_prime[1] = false;
	
	for(int i = 2; i * i <= n; i++){
		if(is_prime[i]){
			for(int j = i * i ; j <= n ; j+=i){
				is_prime[j] = false;
			}
		}
	}
} 


//欧拉筛质数 
void OL_sieve(int n) {
	vector<int> primes;
	fill(is_prime,is_prime + n + 1,true);
	is_prime[0] = is_prime[1] = false;
	
	for(int i = 2; i <= n; i++){
		if(is_prime[i]) primes.push_back(i);
		for(int j = 0; j <primes.size() && i * primes[j] <= n; j++){
			is_prime[i * primes[j]] = false;
			if(i % primes[j] == 0) break; //避免进行重复的标记 
		}
	}
}
int main(){
	int n;cin>>n;
	OL_sieve(n);
	int num = 0;
	for(int i = 2; i <= n; i++){
		if(is_prime[i]) {
		cout<<i << " ";
		num++;
		if(num >= 10 && num % 10 == 0) cout<<'\n';
	}
	
	}
	return 0;
}

进制转换

k进制转换10进制

cpp 复制代码
//k进制转换成十进制 
#include<bits/stdc++.h>
using namespace std;
using ll = long long ;
const  int  N = 50;
int a[N];
int main(){
	string s;
	cin>>s;
	int k; cin>>k;
	int n = s.length();
	for(int i = 0; i < n; i++){
		a[i] = s[i] - '0';
	}
	ll res = 0;
	for(int i = 0;i < n ; i++){
		res = res * k + a[i];
	}
	cout<<res<<'\n';
	return 0;
} 
相关推荐
Yupureki2 小时前
《Linux系统编程》15.进程间通信-管道
linux·运维·服务器·c语言·c++
Yupureki2 小时前
《Linux系统编程》14.库的制作与原理
linux·运维·服务器·c语言·开发语言·c++
2301_822782822 小时前
嵌入式C++调试技术
开发语言·c++·算法
2301_776508722 小时前
实时信号处理库
开发语言·c++·算法
三三有猫2 小时前
爬虫代理基础知识:为什么用与怎么用
开发语言·c++·爬虫
cpp_25012 小时前
P8395 [CCC 2022 S1] Good Fours and Good Fives
数据结构·c++·算法·动态规划·图论·题解·洛谷
云泽8082 小时前
蓝桥杯算法精讲:深剖分治算法及其经典应用
算法·职场和发展·蓝桥杯
2401_857918293 小时前
C++与自动驾驶系统
开发语言·c++·算法
liu****3 小时前
linux上git推送内容到gitee上
c++·git·gitee·版本控制