[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

相关推荐
双叶83631 分钟前
(C语言)写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和(递归函数)
c语言·开发语言·数据结构·算法·游戏
BineHello40 分钟前
强化学习 - PPO控制无人机
人工智能·算法·自动驾驶·动态规划·无人机·强化学习
阿饼24042 分钟前
算法——层序遍历和中序遍历构造二叉树
数据结构·算法
贫道绝缘子1 小时前
Leetcode-132.Palindrome Partitioning II [C++][Java]
java·c++·算法·leetcode
spatial_coder2 小时前
deepseek GRPO算法保姆级讲解(数学原理+源码解析+案例实战)
人工智能·算法
earthzhang20213 小时前
《Python深度学习》第四讲:计算机视觉中的深度学习
人工智能·python·深度学习·算法·计算机视觉·numpy·1024程序员节
小咖拉眯4 小时前
蓝桥杯进制问题秒破解法|冲击省一题单(二)
java·数据结构·算法·蓝桥杯
一只_程序媛4 小时前
【leetcode hot 100 146】LRU缓存
算法·leetcode·缓存
float_六七4 小时前
五大基础算法——贪心算法
算法·贪心算法
kkk16222454 小时前
C# Winform 实现换肤,并自定义皮肤功能
java·算法·c#