[Sum] C++STL oj常用API

目录

一、头文件管理

[1.1 万能头文件(快捷方式)](#1.1 万能头文件(快捷方式))

[1.2 标准头文件规范](#1.2 标准头文件规范)

二、输入输出处理

[2.1 基本输入方式](#2.1 基本输入方式)

[2.2 格式化输出](#2.2 格式化输出)

[三、常用 API 详解](#三、常用 API 详解)

[3.1 字符串操作( )](#3.1 字符串操作( ))

[3.2 容器操作](#3.2 容器操作)

Vector(动态数组)

Stack/Queue

[3.3 排序与自定义规则](#3.3 排序与自定义规则)

[3.4 哈希容器](#3.4 哈希容器)

unordered_map

set

四、实践建议


完整导图内容可见博主主页 gitee,关于oj常用的一些算法模板的导图 还差一点才画完,之后看情况,可能会整理一下也贴过来叭

一、头文件管理

1.1 万能头文件(快捷方式)

复制代码
#include <bits/stdc++.h>  // GCC 扩展头文件(非标准)
using namespace std;      // 启用标准命名空间(包含 cin/cout)

注意事项

  • 仅适用于小型程序/竞赛场景,正式项目推荐显式包含所需头文件(如 <iostream> <vector>
  • 使用 using namespace std 可能造成命名污染,大型项目建议显式调用(如 std::cout

1.2 标准头文件规范

|----------|----------------------|------------|
| 类型 | 示例 | 说明 |
| C++ 标准库 | <iostream> | 输入输出流 |
| C 标准库兼容版 | <cmath> | 数学函数 |
| 容器类 | <vector> <queue> | 动态数组/队列等容器 |
| 算法类 | <algorithm> | 排序、查找等算法 |

(更多头文件分类参考微软官方文档


二、输入输出处理

2.1 基本输入方式

复制代码
int num;
string str;
char arr[20];

cin >> num;                    // 读取到空格/回车停止
getline(cin, str);             // 读取整行(含空格)
cin.getline(arr, 20);          // 读取到 char 数组

2.2 格式化输出

复制代码
double sum = 1.664;
printf("sum is %06.2lf", sum); // 输出:sum is 001.66

// 格式说明符:
// %s(string), %c(char), %d(int)
// %f(float), %lf(double)

三、常用 API 详解

3.1 字符串操作(<string>

复制代码
string s = "Hello";

s.push_back('!');       // 尾部插入字符
s.insert(s.begin()+3,'X'); // 指定位置插入
s.erase(2, 3);          // 删除从索引2开始的3个字符
s.substr(0,4);          // 截取子串 -> "Hell"
transform(s.begin(), s.end(), s.begin(), ::toupper); // 全转大写

3.2 容器操作

Vector(动态数组)
复制代码
vector<int> arr {3,1,4};
sort(arr.begin(), arr.end());    // 排序 [1,3,4]
reverse(arr.begin(), arr.end()); // 反转 [4,3,1]
arr.erase(arr.begin()+1);        // 删除第二个元素
Stack/Queue
复制代码
stack<int> s;
s.push(10);             // 入栈
cout << s.top();        // 查看栈顶

queue<string> q;
q.push("task1");        // 入队
q.pop();                // 出队

3.3 排序与自定义规则

复制代码
// 结构体排序
struct Node { int val; };
bool compare(Node a, Node b) {
    return a.val > b.val;  // 降序排列
}

// 字符串字典逆序
sort(s.begin(), s.end(), [](char a, char b){
    return a > b;
});

3.4 哈希容器

unordered_map
复制代码
unordered_map<int, string> map;
map[1] = "Tom";                // 插入键值对
if(map.find(1) != map.end()) { // 查找元素
    cout << map.at(1);         // 安全访问
}
set
复制代码
set<int> uniqueNums;
uniqueNums.insert(5);          // 自动去重
if(uniqueNums.count(5)) {      // 存在性检查
    uniqueNums.erase(5);       
}

四、实践建议

  1. 头文件管理 :大型项目使用 #pragma once 防止重复包含
  2. 内存安全:vector 替代原始数组,避免越界访问
  3. 性能优化 :优先使用 emplace_back() 替代 push_back() 减少拷贝
  4. 代码规范 :复杂排序规则 建议使用 lambda 表达式保持代码简洁

这两点的使用可看下一篇的sum

相关推荐
Eloudy3 小时前
简明量子态密度矩阵理论知识点总结
算法·量子力学
点云SLAM3 小时前
Eigen 中矩阵的拼接(Concatenation)与 分块(Block Access)操作使用详解和示例演示
人工智能·线性代数·算法·矩阵·eigen数学工具库·矩阵分块操作·矩阵拼接操作
算法_小学生4 小时前
支持向量机(SVM)完整解析:原理 + 推导 + 核方法 + 实战
算法·机器学习·支持向量机
iamlujingtao5 小时前
js多边形算法:获取多边形中心点,且必定在多边形内部
javascript·算法
算法_小学生5 小时前
逻辑回归(Logistic Regression)详解:从原理到实战一站式掌握
算法·机器学习·逻辑回归
DebugKitty6 小时前
C语言14-指针4-二维数组传参、指针数组传参、viod*指针
c语言·开发语言·算法·指针传参·void指针·数组指针传参
qystca6 小时前
MC0241防火墙
算法
charlie1145141916 小时前
设计自己的小传输协议 导论与概念
c++·笔记·qt·网络协议·设计·通信协议
行然梦实8 小时前
粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题
算法·机器学习·数学建模
XH华8 小时前
C语言第六章函数递归
c语言·开发语言·算法