[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

相关推荐
kk哥889927 分钟前
C++ 对象 核心介绍
java·jvm·c++
helloworddm28 分钟前
WinUI3 主线程不要执行耗时操作的原因
c++
YoungHong199231 分钟前
面试经典150题[072]:从前序与中序遍历序列构造二叉树(LeetCode 105)
leetcode·面试·职场和发展
无能者狂怒1 小时前
YOLO C++ Onnx Opencv项目配置指南
c++·opencv·yolo
im_AMBER1 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
集智飞行1 小时前
c++函数传参的几种推荐方式
开发语言·c++
鼾声鼾语2 小时前
matlab的ros2发布的消息,局域网内其他设备收不到情况吗?但是matlab可以订阅其他局域网的ros2发布的消息(问题总结)
开发语言·人工智能·深度学习·算法·matlab·isaaclab
LYFlied2 小时前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
Swizard2 小时前
别再迷信“准确率”了!一文读懂 AI 图像分割的黄金标尺 —— Dice 系数
python·算法·训练
s09071362 小时前
紧凑型3D成像声纳实现路径
算法·3d·声呐·前视多波束