[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

相关推荐
董董灿是个攻城狮3 小时前
5分钟搞懂什么是窗口注意力?
算法
Dann Hiroaki3 小时前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
xiaolang_8616_wjl4 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
夜月yeyue4 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
qqxhb5 小时前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择
无小道5 小时前
c++-引用(包括完美转发,移动构造,万能引用)
c语言·开发语言·汇编·c++
FirstFrost --sy6 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森6 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
Tanecious.7 小时前
C++--map和set的使用
开发语言·c++
搂鱼1145147 小时前
(倍增)洛谷 P1613 跑路/P4155 国旗计划
算法