[Sum] C++STL oj常用API

embedded/2025/3/16 16:03:06/

目录

一、头文件管理

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

1.2 标准头文件规范

二、输入输出处理

2.1 基本输入方式

2.2 格式化输出

三、常用 API 详解

3.1 字符串操作( )

3.2 容器操作

Vector(动态数组)

Stack/Queue

3.3 排序与自定义规则

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


http://www.ppmy.cn/embedded/173102.html

相关文章

maven笔记

maven介绍和作用 Maven 是一款为 Java 项目构建管理、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 主要作用的理解&#xff1a; 依赖管理&#xff1a; 在编写项目时我…

在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别

在微信小程序或前端开发中&#xff0c;picker 和 select 都是用户交互中用于选择的组件&#xff0c;但它们在功能、设计和使用场景上有一定的区别。 1. picker 的特点 描述&#xff1a; picker 是微信小程序中的原生组件&#xff0c;通常用于选择单项或多项值&#xff0c;如时…

C++之list类(超详细)

在上一节中我们学习了STL中的vector这个容器&#xff0c;这节我们来学习一下另外一个常用的容器——list。 文章目录 前言 一、list的介绍 二、list的使用及相关接口 1.list的使用 2.list的迭代器使用 3.list的相关接口 3.1 list capacity 3.2 list element access 3.3…

3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为无…

Project回调函数qsort②进阶应用

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h>//库函数strcmp头文件 //使用qsort排序结构体 struct Stu { char name[20]; int age; }; //按照年龄排序 int cmp_stu_by_age(const void* e1,const void* e2) { return ((struc…

SpringBoot3实战(从0快速搭建SpringBoot3工程、全局异常处理器、自定义封装结果类、自定义异常)(2025详细教程)(1)

目录 一、博客引言。 &#xff08;1&#xff09;SpringBoot3实战学习篇开篇介绍。 &#xff08;2&#xff09;Vue3实战学习篇回顾介绍。 二、从0快速搭建SpringBoot3工程。(详细步骤) &#xff08;1&#xff09;项目层次结构说明。 &#xff08;2&#xff09;SpringBoot3新工程…

【接口封装】——22、读写文件

解释&#xff1a; 1、封装内容&#xff1a;对不同文件内容的读取->处理->写入 2、文件流写入 3、插入处理函数&#xff1a; if (!replaceJsTxt(tmpFileContent)) return; 函数定义&#xff1a; #include <QMessageBox> #include <QTextStream>void init…

深度解读DeepSeek部署使用安全(48页PPT)(文末有下载方式)

深度解读DeepSeek&#xff1a;部署、使用与安全 详细资料请看本解读文章的最后内容。 引言 DeepSeek作为一款先进的人工智能模型&#xff0c;其部署、使用与安全性是用户最为关注的三大核心问题。本文将从本地化部署、使用方法与技巧、以及安全性三个方面&#xff0c;对Deep…