c++中常用库函数

大小写转换

islower/isupper函数

char ch1 = 'A';
char ch2 = 'b';//使用islower函数判断字符是否为小写字母
if(islower(ch1)){cout << ch1 << "is a lowercase letter." << end1;
} else{cout << ch1 << "is not a lowercase letter." << end1;
}
//使用isupper函数判断字符是否为大写字母
if(isupper(ch2)){cout << ch2 << "is a uppercase letter." << end1;
} else{cout << ch2 << "is not a uppercase letter." << end1;
}

tolwer/toupper函数

char ch1 = 'A';
char ch2 = 'b';
//使用tolower函数将字符转换为小写字母
char lowercaseCh1 = tolwer(ch1);
cout << "tolower of" << ch1 << "is" << lowercaseCh1 << end1;//使用toupper函数将字符转换为大写字母
char uppercaseCh2 = toupper(ch2);
cout << "uppercase of" << ch2 << "is" << uppercaseCh1<<end1;

ascii码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大小写转换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实例

#include<bits/stdc++.h>
using namespace std;
char covertedCh(char ch){if(islower(ch)ch = toupper(ch));else if(isupper(ch)ch = tolower(ch));
}
int main()
{string s; getline(cin,s);for(auto &i : s)i = covertedCh(i);cout << s << end1;return 0;
}

二分查找

二分查找的前提

  • 只能对数组进行二分查找
  • 数组元素单调

binary_seach函数

vertor<int> numbers = {1, 3, 5, 7, 9};
int target = 5;
//使用binary search查找目标元素
bool found = binary_seach(numbers.begin(),number.end(),target());
if(found){count << "Target element" << target << "found." << end1;
} else{cout << "Target element" << target << "not founf."<< end1;
}

lower_bound和upper_bound

前提:数组必须是非降序

如果要在非降序的数组中使用,可以通过修改比较函数实现(方法与sort自定义比较函数类似)。

loower_bound(st,ed,x)返回地址[st,ed)中第一个大于等于x的元素的地址

upper_bound(st,ed,x)返回地址[st,ed)中第一个大于x的元素的地址

如果不存在则返回最后一个元素的下一个位置,在vector中即end()

//初始化v
vector<int> v = {5, 1, 7, 3, 10, 18, 9};
sort(v.begin(),v.end());for(auto &i : v) cout << i << ' ';
cout << '\n';//找到数组中第一个大于等于8的元素的位置
cout << (lower_bound(v.begin(),v.end(),8) - v.begin()) << endl;

排序

sort的用法

*sort(起始地址, 结束地址的下一位, 比较字符);

vector<int> v = {5, 1, 3, 9, 11}; 
sort(v.begin(), v.end());//默认升序
for(int i = 1; i <= v.size(); ++i) cout << a[i] << ' ';
子定义比较函数
bool cmp(const int &u, const int &v)
{return u > v;
}int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);vector<int> v = {5, 1, 3, 9, 11};sort(v.begin(), v.end(),cmp);//降序排序for(int i = 0; i < v.size(); ++i)cout << v[i] << ' ';
} 
vertor<int> v = {5, 1, 3, 9, 11};
sort(v.begin(), v.end(), [](const int &u, const int &v))
{//降序排序return u > v;
};
for(int i = 0; i < v.size(); ++i)cout << v[i] << ' ';

结构体可以将小于号重载后进行排序,当然用前面的方法也是可行的

struct Node{int u, v;bool operator < (const Node &m) const{return u == m.u? v < m.v : u < m.u;}
};

例题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include<bits/stdc++.h>

全排列

next_permutation()函数

next_permutation 函数用于生成当前序列的下一个排序。它按照字典序对序列进行重新排序,如果存在下一个排列,则将当前序列更改为下一个排列,并返回true; 如果当前序列已经是最后一个排序,则将序列更改为第一个排列,并返回false.

vertor<int> nums = {1, 2, 3};
cout << "Initial permutation: ";
for(int num : nums){cout << num << " ";
} cout << endl;
//生成下一个排列
whilenevt_permutation(nums.begin(), nums.end()){cout << "Next permutation: ";for(int num : nums){cout << num << " ";} cout << endl;
}
_ _
123
132
213
312
321

prev_permutation() 函数

prev_permutation 函数与 next_permutation 函数相反,它用于生成当前序列的上一个排序。它按照字典对序列进行重新排序,如果存在上一个排列,则将当前序列更改为上一个排序,并返回true; 如果当前序列已经是第一个排序,则将序列更改为最后一个排序,并返回false.

vertor<int> nums2 = {3, 2, 1};
cout << "Initial permutation: ";
for(int num : nums2){cout << num << " ";
} cout << endl;
//生成上一个排列
while(prev_permutation(nums2.begin(), nums2.end()){cout << "Prevous permutation: ";for(int num : nums2){cout << num << " ";} cout << endl;
}
321
312
231
213
132
123

实例

题目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include <iostream>
#include <algorithm>
using namespace std;int main() {string str;getline(cin, str);int len = str.size();sort(str.begin(), str.end());bool tag = true;while (tag) {cout << str << endl;tag = next_permutation(str.begin(), str.end());}return 0;
}

最值查找

min和max函数

eg

min(3,5) = 3;

min{1, 2, 3, 4} = 1;

max(5, 7) = 7;

max{1, 2, 3, 4} = 4;

min_element 和 max_element

min_element(st, ed)返回地址[st, ed)中最小的那个值的地址(迭代器),传入参数为两个地址或迭代器。

max_element(st, ed)返回地址[st, ed)中最大的那个值的地址(迭代器),传入参数为两个地址或迭代器。

时间复杂度均为O(n),n为数组大小(由传入的参数决定)。

vetor<int> v = {5, 1, 3, 9, 11}; // 初始化V
//输出最大的元素,*表示解引用,即通过地址(迭代器)得到值
cout << *max_element(v.begin(), v.end()) << '\n';

nth_element 函数

nth_element(st,k,ed)

进行部分排序,返回值为void()

传入参数为三个地址或迭代器。其中第二个参数位置的元素将处于正确位置,其他地理位置的顺序可能是任意的,但前面的都比它小,后面的都比它大。

时间复杂度O(n).

vector<int> v = {5, 1, 7, 3, 10, 18, 9};//初始化V
//输出最大的元素, *表示解引用,即通过地址(迭代器)得到值
nth_element(v.begin(), v.begin() + 3, v.end());
//这里v[3]的位置将会位于排序后的位置,其他的任意
for(auto &i : v) cout << i << " ";

输出

3 1 5 7 9 18 10

取小数(保留两位小数)

cout << fixed << setprecision << 1.0*sum / m << '\n';

其他库函数

memset()

==memset()==是一个用于设置内存块值的函数。它的原型定义在****头文件中,函数的声明如下:

void* memset(void* ptr, int value, size_t num);

memset()函数接受三个参数:

1.ptr: 指向要设置值的内存块的指针。

  1. value: 要设置的值,通常是一个整数(8位二进制数)
  2. num: 要设置的字节数(Byte = 8bit)
#include<bits/stdc++.h>
using namespace std;
int main(){int a[5];memset(a, 0, sizeof(a));//memset(a, 0, sizeo a);//或者写成 0*3ffor(int i = 0; i < 5; ++i) cout << a[i] << '\n';//memset(a, 1, sizeof a);//for(int i = 0; i < 5; ++i) //cout << bitset<32>(a[i]) << '\n';reutnr 0;
}

swap()

swap(T &a, T &b) 函数接受两个参数

swap()函数可以用于交换任意类型的变量

int a = 10;
int b = 20;
std::swap(a, b);

reverse()

reverse() 是一个用于反转容器中元素顺序的函数。

它的原型定义在****头文件中,函数声明如下:

template<class BidirIt>
void reverse(BidirTt first, BidirIt last);

reverse()函数将[first, last) 范围内的元素顺序进行反转。

也就是说,它会将[first, last)范围内的元素按相反的顺序重新排列。

reverse()函数可用于反转各种类型的容器,包括数组、向量、链表等。

以下是一个示例,展示如何使用reverse()函数反转一个整型向量的元素顺序:

#include<iostream>
#include<vector>
#includea<algorithm>
using namespace std;
int main(){vector<int> vec = {1, 2, 3, 4, 5};reverse(vec.begin(), vec.end());for(int num : vec){cout << num << " ";}cout << endl;return 0;
}

unique()

unique(first, last) 函数接受两个参数:

unique()函数将[first, last)范围内的相邻重复元素去除,并返回一个指向去重后范围的尾后迭代器。

去重后的范围中只保留了第一个出现的元素,后续重复的元素都被移除。

unique()函数可用于去除各种类型的容器中的相邻重复元素,包括数组、向量、链表等。

以下是一个示例,展示如何使用unique()函数去除一个整型向量中的相邻重复元素

//必须先排序,然后去重
int main(){vertor<int> vec = {1, 1, 2, 2, 3, 3, 4, 4, 5};auot it = unique(vec.begin(), vec.end());vec.erase(it, vec.endl);for(int num : vec){cout << num << " ";}cout << endl;return 0;
}

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

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

相关文章

上采样-Lanczos插值

Lanczos插值是一种高级的上采样方法&#xff0c;它在计算目标图像中每个像素的值时&#xff0c;利用了周围像素的信息&#xff0c;并通过Lanczos滤波器进行插值计算&#xff0c;以产生较为清晰的结果。下面通过图文并茂的方式详细描述Lanczos插值方法的实现过程。 现在我们想将…

IntelliJ IDEA(WebStorm、PyCharm、DataGrip等)设置中英文等宽字体,英文为中文的一半(包括标点符号)

1.设置前&#xff08;idea默认字体为 JetBrains Mono&#xff09; 2.设置后&#xff08;楷体&#xff09;

计算机网络常见面试总结

文章目录 1. 计算机网络基础1.1 网络分层模型1. OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;2.TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;3. 为什么网络要分层&#xff1f; 1.2 常见网络协议1. 应用层有哪些常见的协议&#xff1f;2…

三种语言实现spark createDataFrame

前言 我们经常需要在本地用数组写一些测试数据,进行spark逻辑测试,需要借助StructType和StructField以及数组生成DataFrame,最终进行测试,这里就简单的用Java、Scala、Python三种语言实现用数组的数据创建DataFrame。 了解StructType和StructField StructType spark stru…

systemctl start docker报错(code=exited, status=1/FAILURE)

运行systemctl start docker报错内容如下: 输入systemctl status docker.service显示以下内容&#xff1a; 本次启动不起来与docker服务无关 具体解决问题是修改 /etc/docker/daemon.json&#xff0c;vim /etc/docker/daemon.json # 添加如下内容 {"registry-mirrors&qu…

ccf201509-3模板生成系统(list,map,字符串综合运用)

问题描述 成成最近在搭建一个网站&#xff0c;其中一些页面的部分内容来自数据库中不同的数据记录&#xff0c;但是页面的基本结构是相同的。例如&#xff0c;对于展示用户信息的页面&#xff0c;当用户为 Tom 时&#xff0c;网页的源代码是&#xff1a; 而当用户为 Jerry 时…

华为OD-C卷-分披萨[100分]

题目描述 "吃货"和"馋嘴"两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。但是粗心的服务员将披萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小。 由于两人都想吃到最多的披萨,他们商量了一个他们认…

使用htmlentities()和nl2br()将文本数据正确显示到前台

问题&#xff1a; 在后台textarea里编辑了有一串字符串&#xff0c;虽然在textarea里编辑是有换行效果的&#xff0c;但是数据获取到就只是\n&#xff0c;前端是不认识这个的&#xff0c;正确输出到前台的换行只能是<br/>。 $str "ABCDEFGHIJKLMNOPQ"; echo…

网络安全之反弹Shell

网络安全之反弹Shell 在网络安全和渗透测试领域&#xff0c;“正向Shell”&#xff08;Forward Shell&#xff09;和"反向Shell"&#xff08;Reverse Shell&#xff09;是两种常用的技术手段&#xff0c;用于建立远程访问目标计算机的会话。这两种技术都可以让攻击者…

Golang | Leetcode Golang题解之第22题括号生成

题目&#xff1a; 题解&#xff1a; var res []stringfunc generateParenthesis(n int) []string {res make([]string, 0)dfs(n, 0, 0, "")return res }func dfs(n int, lc int, rc int, path string) {if lc n && rc n {res append(res, path)return }…

2024-Java-Maven学习笔记

Maven Maven是一个Java项目管理和构建工具&#xff0c;作用&#xff1a;定义&#xff08;规范&#xff09;项目结构、项目依赖、使用统一的方式自动化构建&#xff08;clean、compile&#xff09;。 提供了一套依赖管理机制&#xff1a;利用仓库统一管理jar包&#xff0c;利用…

阿里云(国内)安装nvm

更多文章&#xff0c;访问&#xff1a;阿里云&#xff08;国内&#xff09;安装nvm – 夜空中最亮的星 直接使用nvm脚本安装的时候一直失败&#xff0c;应该是国内网络的问题&#xff0c;使用下面方案进行解决&#xff1a; 下载 cd / wget https://github.com/nvm-sh/nvm/arch…

机器学习-09-图像处理01-理论

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中图像处理技术。 参考 02图像知识 色彩基础知识整理-色相、饱和度、明度、色调 图像特征提取&#xff08;VGG和Resnet特征提取卷积过程详解&#xff09; Python图像处理入门 【人工智能】PythonOpenCV…

线程池-线程池分类

线程池分类 FixedThreadPool&#xff1a;固定大小线程池&#xff0c;线程数量固定&#xff0c;不会自动扩容或缩容。 CachedThreadPool&#xff1a;缓存线程池&#xff0c;线程数量不固定&#xff0c;根据需要自动扩容或缩容。适用于执行大量短时间任务的场景。 SingleThrea…

HttpClient、OKhttp、RestTemplate接口调用对比( Java HTTP 客户端)

文章目录 HttpClient、OKhttp、RestTemplate接口调用对比HttpClientOkHttprestTemplate HttpClient、OKhttp、RestTemplate接口调用对比 HttpClient、OkHttp 和 RestTemplate 是三种常用的 Java HTTP 客户端库&#xff0c;它们都可以用于发送 HTTP 请求和接收 HTTP 响应&#…

微服务学习(黑马)

学习黑马的微服务课程的笔记 导学 微服务架构 认识微服务 SpringCloud spring.io/projects/spring-cloud/ 服务拆分和远程调用 根据订单id查询订单功能 存在的问题 硬编码 eureka注册中心 搭建eureka 服务注册 在order-service中完成服务拉取 Ribbon负载均衡 Nacos注册中心…

水利自动化控制系统平台介绍

水利自动化控制系统平台介绍 在当今社会&#xff0c;水资源的管理和保护日益成为全球关注的重要议题。随着科技的进步和信息化的发展&#xff0c;水利监测系统作为一种集成了现代信息技术、自动化控制技术以及环境监测技术的综合性平台&#xff0c;正在逐步改变传统的水利管理模…

快照技术的基本介绍

目录 一、概述 二、名词解释 三、镜像分离 四、COW 五、ROW 六、参考 一、概述 全球网络存储工业协会 SNIA&#xff08;Storage Networking Industry Association&#xff09;对快照&#xff08;Snapshot&#xff09;的定义是&#xff1a;关于指定数据集合的一个完全可用…

广佛站点导航助手小程序产品使用说明书

一、产品简介 广佛站点导航助手小程序是一款专为广佛地区用户设计的地铁导航工具。通过获取用户的实时位置信息&#xff0c;小程序能够迅速定位并展示离用户最近的三个地铁站点。用户可以通过本小程序轻松查找地铁站点&#xff0c;规划出行路线&#xff0c;提高出行效率。 二、…

【背】蓝桥杯大模板

蓝桥杯大模板 /* 头文件声明区 */ #include <STC15F2K60S2.H>//单片机寄存器专用头文件 #include <Init.h>//初始化底层驱动专用头文件 #include <Led.h>//Led底层驱动专用头文件 #include <Key.h>//按键底层驱动专用头文件 #include <Seg.h>//…