当前位置: 首页 > news >正文

算法题中常用的C++功能

文章目录

    • 集合
    • 优先队列
    • 双端队列
    • 排序时自定义比较函数
    • 最大数值
    • 字符串
      • 追加:
      • 删除:
      • 子串:
    • 元组
    • vector
      • 查找
      • 创建和初始化赋值:
    • 字典map
      • 引入头文件
      • 定义和初始化
      • 插入元素
      • 访问元素
      • 更新元素
      • 删除元素
      • 检查元素存在
      • 遍历元素
      • int和string转换

集合

无重复字符的最长子串

unordered_set<char> occ;
occ.erase(s[i - 1]);
occ.insert(s[rk + 1]);
occ.count(s[rk + 1]);

优先队列

滑动窗口最大值

priority_queue<pair<int, int>> Q;
Q.push({nums[i + k - 1], i + k - 1});
Q.top()
Q.pop();
  • 优先队列自定义比较函数
    前k个高频元素
struct ComparePairFirst {bool operator()(const std::pair<int, int>& lhs, const std::pair<int, int>& rhs) const {return lhs.second > rhs.second;}
};
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, ComparePairFirst> pq;

双端队列

滑动窗口最大值

deque<int> q;
q.front()
q.back()
q.push_front()
q.pop_front()
q.push_back()
q.pop_back()

排序时自定义比较函数

使用lambda表达式:

auto compare = [](int a, int b) { return a > b; };
std::priority_queue<int, std::vector<int>, decltype(compare)> ascendingPQ(compare);

使用结构体:

sort(intervals.begin(), intervals.end(),[](const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}); //小顶堆

最大数值

#include <climits>
INT_MAX

字符串

追加:

  1. 使用运算符 +=
std::string str = "example";
str += 'a';  // 现在 str 是 "examplea"
  1. 使用 append 成员函数:
std::string str = "example";
str.append(1, 'a');  // 现在 str 是 "examplea"

这里,append 函数的第一个参数是追加字符的数量(在这个例子中是1),第二个参数是要追加的字符。

删除:

在C++中,要删除std::string类型的字符串的最后一个字符,可以采用以下几种方法:

  1. 使用 pop_back() 方法:

    std::string str = "example";
    str.pop_back();  // 删除最后一个字符,现在 str 是 "exampl"
    

    pop_back()函数直接删除字符串末尾的字符。

  2. 使用 erase() 方法:

    std::string str = "example";
    str.erase(str.length() - 1);  // 或者 str.erase(str.end() - 1);
    // 删除最后一个字符,现在 str 是 "exampl"
    

    erase()方法可以删除指定位置的字符或字符范围,这里用来删除最后一个字符。

子串:

std::string str = "Hello, World!";
std::string subStr = str.substr(7, 5);  // 从第7个字符开始,取5个字符长度的子串

元组

腐烂的橘子

queue<tuple<int, int, int>> q;
q.push({i, j, 0});
x = get<0>(ele);

vector

查找

std::vector<int>::iterator pos = std::find(vec.begin(), vec.end(), 3);
if(pos != vec.end()) {std::cout << "找到了元素3" << std::endl;
} else {std::cout << "没有找到元素3" << std::endl;
}int lastElement = vec.back();

创建和初始化赋值:

std::vector<std::vector<int>> table(nums.size() + 1, std::vector<int>(target + 1, 0));

字典map

引入头文件

#include <unordered_map>

定义和初始化

定义一个空的unordered_map

std::unordered_map<std::string, int> myMap;

或者定义并初始化一些元素:

std::unordered_map<std::string, int> myMap = {{"apple", 1},{"banana", 2},{"cherry", 3}
};

插入元素

使用insert方法插入元素:

myMap.insert({"grape", 4});

也可以使用下标操作符[]插入,如果键不存在则插入,存在则修改其值:

myMap["orange"] = 5;

访问元素

通过键访问对应的值,如果键不存在,使用下标操作符会自动插入默认值(对于内置类型如int,默认为0):

int value = myMap["apple"];

使用find方法查找键,返回一个迭代器:

auto it = myMap.find("banana");
if (it != myMap.end())
{std::cout << "Found: " << it->first << " -> " << it->second << std::endl;
}
else
{std::cout << "Not found!" << std::endl;
}

更新元素

直接通过下标操作符更新:

myMap["apple"] = 10;  // 如果键存在,则更新其值

删除元素

使用erase方法删除元素,可以通过键或迭代器删除:

myMap.erase("banana");
// 或者
myMap.erase(it);

检查元素存在

使用count方法检查键是否存在:

if (myMap.count("pear"))
{std::cout << "Pear exists in the map." << std::endl;
}
else
{std::cout << "Pear does not exist in the map." << std::endl;
}

或使用find后检查迭代器是否等于end()

遍历元素

使用范围基础for循环遍历:

for (const auto &pair : myMap)
{std::cout << pair.first << ": " << pair.second << std::endl;
}

int和string转换

字符串解码

stack<string> stk;
stk.push(to_string(mul));
int old_mul = stoi(stk.top()); stk.pop();

相关文章:

算法题中常用的C++功能

文章目录 集合优先队列双端队列排序时自定义比较函数最大数值字符串追加&#xff1a;删除&#xff1a;子串&#xff1a; 元组vector查找创建和初始化赋值&#xff1a; 字典map引入头文件定义和初始化插入元素访问元素更新元素删除元素检查元素存在遍历元素int和string转换 集合…...

左扰动和右扰动

在SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;中&#xff0c;使用左扰动还是右扰动主要取决于你如何定义坐标系和你希望扰动影响的姿态表示。这通常与你的坐标系选择和你正在解决的具体问题有关。 左扰动通常用于以下情况&#xff1a; 当你使用局部坐…...

【计算机网络】期末复习(2)

目录 第一章&#xff1a;概述 第二章&#xff1a;物理层 第三章&#xff1a;数据链路层 第四章&#xff1a;网络层 第五章&#xff1a;传输层 第一章&#xff1a;概述 三大类网络 &#xff08;1&#xff09;电信网络 &#xff08;2&#xff09;有线电视网络 &#xff0…...

ojdbc8-full Oracle JDBC 驱动程序的一个完整发行版各文件的功能

文章目录 1. ojdbc8.jar2. ons.jar -3. oraclepki.jar -4. orai18n.jar -5. osdt_cert.jar -6. osdt_core.jar -7. ojdbc.policy -8. README.txt -9. simplefan.jar -10. ucp.jar -11. xdb.jar - ojdbc8-full 是 Oracle JDBC 驱动程序的一个完整发行版&#xff0c;包含了连接和…...

在Linux环境下使用sqlite3时,如果尝试对一个空表进行操作(例如插入数据),可能会遇到表被锁定的问题。

在Linux环境下使用sqlite3时&#xff0c;如果尝试对一个空表进行操作&#xff08;例如插入数据&#xff09;&#xff0c;可能会遇到表被锁定的问题。这通常是因为sqlite3在默认情况下会对空表进行“延迟创建”&#xff0c;即在实际需要写入数据之前&#xff0c;表不会被真正创建…...

【目标检测】DINO

一、引言 论文&#xff1a; DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 作者&#xff1a; IDEA 代码&#xff1a; DINO 注意&#xff1a; 该算法是在Deformable DETR、DAB-DETR、DN-DETR基础上的改进&#xff0c;在学习该算法前&#…...

一文包学会ElasticSearch的大部分应用场合

ElasticSearch 官网下载地址&#xff1a;Download Elasticsearch | Elastic 历史版本下载地址1&#xff1a;Index of elasticsearch-local/7.6.1 历史版本下载地址2&#xff1a;Past Releases of Elastic Stack Software | Elastic ElasticSearch的安装(windows) 安装前所…...

创建kobject

1、kobject介绍 kobject的全称是kernel object&#xff0c;即内核对象。每一个kobject都会对应系统/sys/下的一个目录。 2、相关结构体和api介绍 2.1 struct kobject // include/linux/kobject.h 2.2 kobject_create_and_add kobject_create_and_addkobject_createkobj…...

数据结构 - C/C++ - 树

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 树的概念 结构特性 树的样式 树的存储 树的遍历 节点增删 二叉搜索树 平衡二叉树 树的概念 二叉树是树形结构&#xff0c;是一种非线性结构。 非线性结构&#xff1a;在二叉树中&#x…...

Linux源码阅读笔记12-RCU案例分析

在之前的文章中我们已经了解了RCU机制的原理和Linux的内核源码&#xff0c;这里我们要根据RCU机制写一个demo来展示他应该如何使用。 RCU机制的原理 RCU&#xff08;全称为Read-Copy-Update&#xff09;,它记录所有指向共享数据的指针的使用者&#xff0c;当要修改构想数据时&…...

【C++】双线性差值算法实现RGB图像缩放

双线性差值算法 双线性插值&#xff08;Bilinear Interpolation&#xff09;并不是“双线性差值”&#xff0c;它是一种在二维平面上估计未知数据点的方法&#xff0c;通常用于图像处理中的图像缩放。 双线性插值的基本思想是&#xff1a;对于一个未知的数据点&#xff0c;我…...

计算机网络知识普及之四元组

在涉及到TCP/UDP等IP类通信协议时&#xff0c;存在四元组概念 这里只是普及使用 先来一些前置知识&#xff0c;什么是IP协议&#xff1f; IP协议全称为互联网协议&#xff0c;处于网络层中&#xff0c;主要作用是标识网络中的设备&#xff0c;每个设备的IP地址是唯一的。 在网…...

深度探讨网络安全:挑战、防御策略与实战案例

目录 ​编辑 一、引言 二、网络安全的主要挑战 恶意软件与病毒 数据泄露 分布式拒绝服务攻击&#xff08;DDoS&#xff09; 内部威胁 三、防御策略与实战案例 恶意软件防护 网络钓鱼防护 数据泄露防护 总结 一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问…...

“穿越时空的机械奇观:记里鼓车的历史与科技探秘“

在人类文明的发展历程中&#xff0c;科技的创新与进步不仅仅推动了社会的进步&#xff0c;也为我们留下了丰富的文化遗产。记里鼓车&#xff0c;作为一种古老的里程计量工具&#xff0c;其历史地位和技术成就在科技史上具有重要的意义。本文将详细介绍记里鼓车的起源、结构原理…...

DevOps CMDB平台整合Jira工单

背景 在DevOps CMDB平台建设的过程中&#xff0c;我们可以很容易的将业务应用所涉及的云资源&#xff08;WAF、K8S、虚拟机等&#xff09;、CICD工具链&#xff08;Jenkins、ArgoCD&#xff09;、监控、日志等一次性的维护到CMDB平台&#xff0c;但随着时间的推移&#xff0c;…...

Vue-路由

路由简介 SPA单页面应用。导航区和展示区 单页Web应用整个应用只有一个完整的页面点击页面中的导航连接不会刷新页面&#xff0c;只会做页面的局部更新数据需要通过ajax请求获取 路由&#xff1a;路由就是一组映射关系&#xff0c;服务器接收到请求时&#xff0c;根据请求路…...

【Rust入门教程】安装Rust

文章目录 前言Rust简介Rust的安装更新与卸载rust更新卸载 总结 前言 在当今的编程世界中&#xff0c;Rust语言以其独特的安全性和高效性吸引了大量开发者的关注。Rust是一种系统编程语言&#xff0c;专注于速度、内存安全和并行性。它具有现代化的特性&#xff0c;同时提供了低…...

Character.ai因内容审查流失大量用户、马斯克:Grok-3用了10万块英伟达H100芯片

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 1、爆火AI惨遭阉割&#xff0c;1600万美国年轻人失恋&#xff1f;Character.ai被爆资金断裂 美国流行的社交软件Character.ai近期对模型进行大幅度内容审查&#xff0c;导致用户感到失望并开始流失。…...

Spring源码九:BeanFactoryPostProcessor

上一篇Spring源码八&#xff1a;容器扩展一&#xff0c;我们看到ApplicationContext容器通过refresh方法中的prepareBeanFactory方法对BeanFactory扩展的一些功能点&#xff0c;包括对SPEL语句的支持、添加属性编辑器的注册器扩展解决Bean属性只能定义基础变量的问题、以及一些…...

大模型笔记1: Longformer环境配置

论文: https://arxiv.org/abs/2004.05150 目录 库安装 LongformerForQuestionAnswering 库安装 首先保证电脑上配置了git. git环境配置: https://blog.csdn.net/Andone_hsx/article/details/87937329 3.1、找到git安装路径中bin的位置&#xff0c;如&#xff1a;D:\Prog…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...