[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

相关推荐
Jasmine_llq7 分钟前
《P4391 [BalticOI 2009] Radio Transmission 无线传输 题解》
算法·字符串·substr
虾球xz27 分钟前
游戏引擎学习第278天:将实体存储移入世界区块
数据库·c++·学习·游戏引擎
水水沝淼㵘34 分钟前
嵌入式开发学习日志(数据结构--单链表)Day20
c语言·开发语言·数据结构·学习·算法
算法给的安全感36 分钟前
bfs-最小步数问题
java·算法·宽度优先
灏瀚星空1 小时前
地磁-惯性-视觉融合制导系统设计:现代空战导航的抗干扰解决方案
图像处理·人工智能·python·深度学习·算法·机器学习·信息与通信
泽02021 小时前
C++类和对象之相关特性
java·开发语言·c++
田梓燊1 小时前
专业课复习笔记 7
笔记·算法
feiyangqingyun1 小时前
Qt/C++开发监控GB28181系统/录像文件查询/录像回放/倍速播放/录像文件下载
c++·qt·gb28181·录像回放·录像文件下载
健康胡1 小时前
仿射变换 与 透视变换
图像处理·人工智能·深度学习·opencv·算法·机器学习·计算机视觉
L_cl2 小时前
【Python 算法零基础 2.模拟 ④ 基于矩阵】
python·算法·矩阵