整理leetcode刷题过程中遇到的常用库函数(c++)

2023-05-16

整理leetcode刷题过程中遇到的常用库函数(c++)

如果有额外的了解需求,可以在微软c++库函数进行了解

以下按照我理解的刷题顺序整理:

数组

数组是刷题的开始,常用的库函数也很简单:
1、在数组的最开始插入一个元素,如数字 1

nums.insert(nums.begin(),1);
nums.begin();//nums[0]

2、表示最后一个元素的后一个元素

nums.end();

3、获得数组的长度

nums.size();

4、重设数组大小

nums.resize(100);    // 此时里面所有元素为 0
cout<<nums.size()<<endl;
for(int item:nums)
    cout<<item;    // 输出全是0

5、排序从小到大

sort(nums.begin(),nums.end());

6、翻转数组

// 注意下面这个函数是将整个数组翻转,不是排序
// 如果要从大到小排序,需要自定义排序规则
reverse(nums1.begin(),nums1.end());

字符串

构造

//构造
string s="123";
char *a="123";
string s = a;

1、翻转字符串

// result is string
reverse(result.begin(),result.end())

2、截取字符串

str.substr(start_index,len)

3、获得字符串的长度

s.length();

4、字符串扩容

string s(len);
s.resize(len+len2);

5、字符串初始化

//s="00...00",初始化为n个0
string s(n,'0');

6、字符串比较函数

int strcmp(string str1,string str2)               //区分字符串中字母大小写地比较
int strcasecmp(string str1,string str2)          //忽略字符串中字母大小写地比较
//str1=str2时,返回0;str1>str时返回1;str1<str2时返回-1。

7、查找

//查找
a.find("12");//返回字串第一个字符的下标,如果没有找到,返回string::npos

8、替换

//char *a="123";
//替换
a.replace(1,2,"ab"); //ab3

9、擦除

//char *a="123";
//删除子串
a.erase(1,2); //3

10、转化

//转成char *
a.c_str();

11、利用字符串压入

string s;
string arr;
arr.push_back(s[i]);

vector

1、定义

//定义:
vector <int> v;

2、访问

//访问:
v[i];

3、大小

//大小
v.size();

4、更新

//更新
v[i]=a;

5、末尾插入

//末尾插入
v.push_back(a);

6、末尾删除

//末尾删除
v.pop_back();

7、清空

//清空
v.clear();

8、空判断

//判断空
v.empty();

9、排序

//排序
sort(v.begin(),v.end());//从小到大
sort(v.rbegin(),v.rend());//从大到小

10、翻转

//翻转
reverse(v.begin(),v.end());

11、自定义排序

bool compare(int a,int b) 
{ 
    return a< b; //升序排列,如果改为return a>b,则为降序 
} 
sort(v.begin(),v.end(),compare);

12、合并

vector.insert(vector.end(),vector1.begin(),vector1.end())

哈希表

1、set
set主要作用是自动去重,对于期望得到不重复的结果,使用set维护输出列表。由于set,multiset通过平衡二叉树实现,有自动排序功能。set不允许重复,multiset允许重复

//定义
set<int> s;
//添加元素
s.insert(i);
//删除元素
s.erase(i);
//查找元素 返回指针
s.find(i);
//大小
s.size();
//遍历
for(set<int>::iterator it=s.begin(); it!=s.end();it++)
{
    cout<<*it<<endl;
}
//范围查找
m.lower_bound(elem);
m.upper_bound(elem);

2、map
map是一个使用键值对key-value 模式的容器,map不允许重复键值,而multimap允许重复键值。适用于词频统计类的问题。map的底层是红黑树。
hashmap操作与map相同,但是底层是hash表,可以在O(1)时间内完成访问操作。

//定义
map<char*, int> m;
//插入
m.insert(pair<char *, int>(key,value))
m[key]=value;
//删除 
m.erase(key);
//访问
m[key];//如果没有这个key,则返回0
//遍历
for(map<char *,int>::iterator it=m.begin();it!=m.end();it++)
{
    cout<<it->first<<" "<<it->second<<endl;
}
//大小
m.size();
//清空
m.clear();
//返回a的列数
m[i].size() 

map内通过key找value和通过value找key

//创建
map<int,char > aMap;
	/**插入初始化的元素**/
/*	//1.用insert函數插入pair
    aMap.insert(pair<string, string>("r000", "student_zero"));
 
    //2.用"array'方式插入
*/
    aMap[0] = 'o';
    aMap[1] = 'a';
    aMap[2] = 'b';
    aMap[3] = 'c';
    aMap[4] = 'd';
    aMap[5] = 'd';//故意弄个重复的value 
    
	int key =2;
	char value='d';
	
	//通过key找value 
	if(aMap.count(key)>0)
	{
    	cout<<"通过key:  "<<key<<"     找到的value:"<<aMap[key]<<endl;
	}
	
	//通过value找 key
	for(std::map<int,char>::iterator it = aMap.begin();it!=aMap.end();it++) 
	{
		if(it->second==value)
			cout<<"通过value:  "<<value<<"    找到的key:"<<it->first<<endl;
	} 

1、初始化栈

stack<int> s;

2、入栈

s.push(1);

3、出栈

s.pop();

4、栈空

bool b = s.empty()    // 栈空返回true

5、得到栈顶元素但不弹出

int a = s.top();

6、得到栈顶元素并弹出

// 没有库函数可以直接既弹出又得到值
int a = s.top();
s.pop();

队列

1、声明一个队列

queue<TreeNode*> q;

2、队列长度

q.size()

3、进队

q.push(root);

4、出队,并不能获得出队元素

q.pop();

5、获得队头元素,但不会弹出这个元素

TreeNode *temp = q.front();

6、取出队头元素并弹出

TreeNode *temp = q.front();
q.pop();

7、获得队尾元素,但不会弹出这个元素

q.back()

8、双端队列

//定义
deque<int> d;
//增加头元素
d.push_front(i);
//增加尾元素
d.push_back(i);
//访问头元素
d.front();
//访问尾元素
d.back();
//删除头
d.pop_front();
//删除尾
d.pop_back();
//判空
d.empty();
//长度
d.size();

1、前序遍历(根,左子,右子)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void preorder(TreeNode* root,vector<int>&res ){
        if(root==nullptr){
            return;
        }
        res.push_back(root->val);
        preorder(root->left,res);
        preorder(root->right,res);
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector <int> res;
        preorder(root,res);
        return res;
    }
};

2、中序遍历(左子,根,右子)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void inorder(TreeNode*root,vector<int>&res){//记得vector传址
        if(root==nullptr){
            return;
        }
        inorder(root->left,res);
        res.push_back(root->val);
        inorder(root->right,res);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int>res;
        inorder(root,res);
        return res;    
    }
};

3、后序遍历(左子,右子,根)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void postorder(TreeNode* root,vector<int>&res){
        if(root==nullptr){
            return;
        }
        postorder(root->left,res);
        postorder(root->right,res);
        res.push_back(root->val);
    }
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int >res;
        postorder(root,res);
        return res;
    }
};

以上,就是我个人的一些记录,在我看来,真理无穷,无限进步吧!

我是栗子,祝你幸福。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整理leetcode刷题过程中遇到的常用库函数(c++) 的相关文章

  • 【SLAM】VINS-MONO解析——基于vins-mono的双目slam系统开发

    这个系统是基于香港科技大学飞行机器人组的开源框架VINS Mono开发的 xff0c 原开源框架是针对单目SLAM 本双目SLAM系统是在原单目开源框架基础上的二次深度开发 xff0c 外部接口与原框架一致 这个项目是我的研究课题项目 xf
  • 【SLAM】VINS-MONO解析——回环检测和重定位

    9 回环检测与重定位 本部分内容涉及到的代码大部分在pose graph文件夹下 xff0c 少部分在vins estimator里 原创内容 xff0c 转载请先与我联系并注明出处 xff0c 谢谢 xff01 系列内容请点击 xff1a
  • API开发手册在线中文版

    Android中文版 api手册地址 xff1a http www matools com api android Bootstrap 3 api手册地址 xff1a http www matools com api bootstrap3
  • 项目规划时间轴流程图

    项目规划时间轴流程图 项目规划时间轴流程图 对一个项目从开始到竣工的整个过程进行总结归纳 时间线图 又叫时间轴图 能以历史进程为载体 将过往的重要事项或者里程碑 标注在轴线上 并加以说明 它的作用是能够可视化内容 以图文的形式呈现出来 时间
  • 架构功能图

    支付系统功能架构图 支付业务的基础系统的复杂性和稳定性是支付业务是否能够及时安全处理的根本 该支付系统功能架构图收集了支付宝的系统架构 完整的支付系统整体架构 从产品分类 模块功能和业务流程 了解支付产品服务的设计 支付系统要兼并合规性 易
  • Web开发技术架构图

    Web开发技术架构图 大型web系统架构动态应用 是相对于网站静态内容而言 是指以c c 43 43 php Java perl net等服务器端语言开发的网络应用软件 比如论坛 网络相册 1 学习Web开发原理 包括MVC MTV等Web
  • 大数据架构图

    大数据管理数据处理过程图 大数据 big data 指无法在一定时间范围内用常规软件工具进行捕捉 管理和处理的数据集合 是需要新处理模式才能具有更强的决策力 洞察力 大数据处理的主要流程包括数据收集 数据存储 数据处理 数据应用等主要环节
  • hutool定时器的使用封装

    启动定时器 建议在main 入口放置 支持秒级别定时任务 CronUtil setMatchSecond true 启动 CronUtil start 使用deamon模式 xff0c CronUtil start true 轮子 impo
  • 网络拓扑架构图

    阿里云应用网络拓扑图 云应用网络架构是指建立在可编程的基础设施之上 基于统一的运行管理平台 按需的分配资源 的网络架构 云网络架构在物理链路 主机网络 网关 控制器四个纬度上全面升级 大大提高了整体网络性能 公司办公网络拓扑图 对于很多大型
  • Kubernetes(K8S)中文文档

    Kubernetes K8S 中文文档 前言Kubernetes是什么 互动教程 Kubernetes 基础概述使用Minikube 部署 Kubernetes 集群使用 kubectl 创建 DeploymentKubernetes 中浏
  • ASCII纯文本绘制流程图

    我们使用纯文本写代码 xff0c 有了Markdown又可以使用纯文本写文档 xff0c 那么图片 xff0c 能不能使用纯文本描述呢 xff1f Text Flow是什么 xff1f Text Flow xff1a 一个强大的在线ASCI
  • ioDraw - 超好用的在线白板,能够手绘各种流程图、架构图

    今天 xff0c 推荐给大家的是一款超级好用的在线绘图工具 xff0c ioDraw在线白板 关于 ioDraw在线白板 一款非常轻量的在线白板工具 xff0c 可以直接在浏览器打开 xff0c 轻松绘制具有手绘风格的图形 比如可以绘制这样
  • ioDraw - 免费的在线图表制作工具

    介绍 xff1a ioDraw是一款数据可视化图表库 xff0c 提供直观 xff0c 生动 xff0c 可交互 xff0c 可个性化定制的数据可视化图表 xff0c 支持折线图 柱状图 饼图 散点图等 地址 xff1a https www
  • 在线流程图绘制工具测评-ioDraw

    对于产品经理和程序员而言 xff0c 流程图制作工具绝对是刚需 xff0c 比起流程图制作软件 xff0c 我更喜欢在线工具 今天跟大家分享一个好用的流程图在线制作工具 ioDraw xff0c 他是免费的 且简单易上手 xff0c 功能强
  • 一款免费好用的代码在线比较工具

    在线代码对比工具 xff08 码工具 xff09 是一款免费的在线文本对比工具 xff0c 无需注册 xff0c 可以在线对两段文本进行对比 xff0c 检测 比较两个文本有什么不同的差异 xff0c 以便修改 xff0c 常用于程序代码
  • LTE学习笔记之接口协议

    LTE 接口协议 三层两面三层两面 空中接口UuL2功能模块用户面控制面 L3功能模块 xff08 控制面 xff09 RRC模块1 系统信息广播2 寻呼3 RRC连接管理4 无线资源控制5 移动性管理NAS信令 地面接口同级接口 X2用户
  • 从零开始构建gRPC的Go服务

    介绍 Protocol Buffers and gRPC是用于定义通过网络有效通信的微服务的流行技术 许多公司在Go中构建gRPC微服务 xff0c 发布了他们开发的框架 xff0c 本文将从gRPC入门开始 xff0c 一步一步构建一个g
  • 在Spring Boot上启用HTTPS

    折腾了很久 xff0c 最新教程 一 获取免费证书 怎么申请不做教程 xff1b 下载证书 xff1a 一定要下载jks的 二 配置springboot 将下载下来的jks文件放进这里 xff1a 然后就是yml文件配置 xff1a key
  • 操作系统整体思路把握

    操作系统定义及功能 硬件资源管理 处理机 存储 设备 文件 和用户服务 现代操作系统比早期阶段操作系统区别在于有了进程管理 多道程序设计的基础 虚拟机观点 裸机 gt 操作系统的形成过程台 人工操作阶段 lt 纸带输入数据 xff0c 人工
  • 《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(二)

    声明 xff1a 此系列答案配套 计算机组成与系统结构 xff08 第二版 xff09 裘雪红 李伯成 西安电子科技大学出版社 一书相关内容 所有内容为博主个人编辑 xff0c 仅作参考学习交流之用 xff0c 转载请注明出处 如发现错误

随机推荐