算法题中常用的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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu20.04更新GLIBC到2.35版本

目录 1 背景2 增加源2.1 标准源2.2 镜像源 3 更新 1 背景 Ubuntu20.04默认GLIBC库版本是2.31.今天碰到一个软件需要2.35版本的GLIBC。 升级GLIBC库有两种方式&#xff1a; 下载高版本库源码&#xff0c;编译后替换系统中低版本库。由于GLIBC库是Linux系统中最基础库&#xff…

你想活出怎样的人生?

hi~好久不见&#xff0c;距离上次发文隔了有段时间了&#xff0c;这段时间&#xff0c;我是裸辞去感受了一下前端市场的水深火热&#xff0c;那么这次咱们不聊技术&#xff0c;就说一说最近这段时间的经历和一些感触吧。 先说一下自己的个人情况&#xff0c;目前做前端四年&am…

深圳技术大学oj C : 生成r子集

Description 输出给定序列按字典序的 &#xfffd; 组合&#xff0c;按照所有 &#xfffd; 个元素出现与否的 01 标记串 &#xfffd;&#xfffd;&#xfffd;&#xfffd;−1,...,&#xfffd;1 的字典序输出. 此处01串的字典序指&#xff1a;先输入的数字对应低位&#x…

移动智能终端数据安全管理方案

随着信息技术的飞速发展&#xff0c;移动设备已成为企业日常运营不可或缺的工具。特别是随着智能手机和平板电脑等移动设备的普及&#xff0c;这些设备存储了大量的个人和敏感数据&#xff0c;如银行信息、电子邮件等。员工通过智能手机和平板电脑访问企业资源&#xff0c;提高…

【HICE】web服务搭建3

端口号的不同进行监听 1.下载httpd协议&#xff1a;dnf install httpd -y 2.编辑vhost.conf cd /etc/httpd cd /conf.d [rootlocalhost conf.d]# cat 1.conf listen 9090 listen 9091 listen 9092 <directory /www> allowoverride none require all granted </d…

【机器学习】Datawhale-AI夏令营分子性质AI预测挑战赛

参赛链接&#xff1a;零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 一、赛事背景 在当今科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的深度和广度渗透到科研领域&#xff0c;特别是在化学及药物研发中展现出了巨…

SpringBoot+Vue集成AOP系统日志

新建logs表 添加aop依赖 <!-- aop依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 新建获取ip地址工具类 import javax.servlet.http.H…

React 函数式组件里面有生命周期吗?没有怎么办?

React 函数式组件没有像类组件那样传统的生命周期方法&#xff0c;但是通过 React Hooks&#xff0c;可以在函数式组件中实现类似的生命周期行为。 useEffect: 可以看作是类组件里的 componentDidMount, componentDidUpdate 和 componentWillUnmount 的结合体。它允许你在函数组…

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

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

React Native V0.74 — 稳定版已发布

嗨,React Native开发者们, React Native 世界中令人兴奋的消息是,V0.74刚刚在几天前发布,有超过 1600 次提交。亮点如下: Yoga 3.0New Architecture: Bridgeless by DefaultNew Architecture: Batched onLayout UpdatesYarn 3 for New Projects让我们深入了解每一个新亮点…

java 利用 gdal 生成遥感tif的缩略图

简要说明 在java&#xff0c;简单使用gdal生成tif文件的缩略图 maven依赖 <!--需要安装完gdal后&#xff0c;本地install gdal包才能使用 --><!--gdal安装可参考 https://blog.csdn.net/qq_41613913/article/details/135743562 --><dependency><groupI…

Docker精华篇 - 常用命令大全,入门到精通!

大家好,我是CodeQi! 我们都知道 Docker 的重要性,以及 Docker 如何在软件开发生命周期中发挥重要作用 。 说实话,学习 Docker 很有趣,至少在我看来是这样。 一旦掌握了基础知识,这并不难。 困难的是记住所有这些命令。 因此,在这篇文章中,我收集了所有命令,或者更…

Patch embed 的映射矩阵多大?

假设我们有一个图像&#xff0c;其大小为 (H \times W \times C)&#xff0c;其中 (H) 是图像的高度&#xff0c;(W) 是图像的宽度&#xff0c;(C) 是图像的通道数&#xff08;例如&#xff0c;RGB 图像的通道数为 3&#xff09;。 将图像划分成 patches: 假设我们将图像划分成…

命令可以不通过数据绑定进行配置

命令可以不通过数据绑定进行配置。在某些情况下&#xff0c;可能希望直接在代码隐藏文件中处理命令逻辑&#xff0c;而不是通过数据绑定。以下是一个完整的例子&#xff0c;展示了如何在不使用数据绑定的情况下实现命令。 ### 1. 定义命令 首先&#xff0c;我们定义一个简单的…

四十篇:内存巨擘对决:Redis与Memcached的深度剖析与多维对比

内存巨擘对决&#xff1a;Redis与Memcached的深度剖析与多维对比 1. 引言 在现代的系统架构中&#xff0c;内存数据库已经成为了信息处理的核心技术之一。这类数据库系统的高效性主要来源于其对数据的即时访问能力&#xff0c;这是因为数据直接存储在RAM中&#xff0c;而非传统…

js学习--制作选项卡

选项卡制作 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>.text_one {width: 11.4%;height: 200px…

海致科技实施实习生面试

一、面试内容 注&#xff1a;此次是电话面试 1.是XX先生吗 2.你是有考虑转实施的吗&#xff1f; 3.请讲一下你对项目部署实施的理解和掌握 4.用过数据库&#xff0c;会编写SQL语句吗&#xff1f; 5.讲一下SQL的常用关键字 6.了解SQL中的函数吗&#xff1f;谈谈函数 7.多…

Hutool 获取中文日期

在开发过程中&#xff0c;有时会需要获取全中文格式的日期&#xff0c;比如&#xff1a;二〇二四年七月三日。 此时就需要将日期转换成该格式&#xff0c;Hutool 封装了该工具&#xff1a; /*** 格式化为中文日期格式&#xff0c;如果isUppercase为false&#xff0c;则返回类似…

身边的故事(十三):阿文的故事:出现

如果他知道一件事情如果违背正常的市场规律就是骗局或者存在巨大的风险&#xff0c;比如市场正常投资回报率在5-6%已经算高回报&#xff0c;像股神巴菲特的投资回报率应该不会超过10%吧。那些说20-30%甚至更高回报率肯定是骗局。如果...哪有那么多如果&#xff0c;人生每一秒都…

前端面试题,说说iframe的优点和缺点 ?

iframe的优点&#xff1a; 内容隔离&#xff1a;iframe 可以将外部内容嵌入到页面中&#xff0c;实现内容的隔离和独立性&#xff0c;避免外部内容对页面的影响。 模块化&#xff1a;通过 iframe&#xff0c;可以将页面拆分成多个模块&#xff0c;每个模块可以…