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*3f
    for(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.mfbz.cn/a/545136.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java单例集合

Collection接口介绍 Collection 表示一组对象&#xff0c;它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。 Collection接口中定义的方法 方法说明boolean add(Object element)增加元素到容器中boolean remove(Object element)从容器中移除元素 boolean c…

【源码】2024全开源多语言多商户跨境商城源码|多语言跨境外贸电商系统App

ikTok SHOP跨境电商系统V8版是一套B2CB2B跨境电商商城系统源码&#xff0c;多商户多语言&#xff0c;全新百变DIY模板&#xff1b;该系统支持B-C自营、B-B-C第三方卖家系统、B2B批发电商模式&#xff1b;该源码是使用Laravel框架PHP开发的&#xff0c;前后端全开源可二开。 版…

行业模板|DataEase批发零售大屏模板推荐

DataEase开源数据可视化分析平台于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

构建跨设备3D应用:HOOPS的跨平台开发能力

在当今数字化和可视化需求不断提升的时代&#xff0c;三维技术的应用越来越广泛&#xff0c;尤其在制造、建筑、工程及媒体行业。HOOPS&#xff0c;由Tech Soft 3D开发&#xff0c;是一套全面的软件开发工具包&#xff0c;用于构建高性能的三维应用程序。该工具包涵盖了从三维渲…

韩国ECS电子离心开关的安装和应用

韩国ECS电子式离心开关是一种新型的固体开关&#xff0c;其工作原理是通过采样电动机的电流、电压、相位等参数来判定电动机的启动转速。当电动机转速达到额定转速的72%~83%时&#xff0c;启动电容将被断开&#xff0c;使电动机启动运转。这种开关具有工作精确、可靠性高、一致…

【新特性】专为开发者设计的 Jira 个性化工作建议

开发者体验&#xff08;Developer Experience&#xff0c;简称 DX&#xff09;是指开发人员在使用工具、框架或平台时所体验到的整体感受和印象。类似于用户体验&#xff08;User Experience&#xff0c;简称UX&#xff09;&#xff0c;开发者体验关注的是开发者在他们的工作中…

DrugBAN:基于双线性注意力网络进行药物-靶点结合预测。

DrugBan&#xff1a;一种可解释的双线性注意力网络进行药物-靶点结合预测。 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 DrugBan&#xff1a;一种可解释的双线性注意力网络进行药物-靶点结合预测。前言一、模型…

gcn代码处理出现的问题

README 版本不一致 python 2.7 PYTHON 3.7 切换 TensorFlow系统的学习使用 数据集下载

yolo系列(之一)

深度学习经典检测算法 two-stage (两阶段) : Faster-rcnn Mask-Rcnn系列 &#xff08;输入图像---》CNN特征---》预选框---》输出结果&#xff09; one-stage (单阶段): YOLO系列 &#xff08;输入图像---》CNN特征---》输出结果&#xff09; one-stage的特点&#xff1a;&…

无人机GB42590接收端 +接收端,同时支持2.4G与5.8G双频WIFI模组

严格按照GB42590的协议开发的发射端&#xff0c;通过串口和模块通讯&#xff0c;默认波特率 921600。 http://www.doit.am/首页-深圳四博智联科技有限公司-淘宝网https://shop144145132.taobao.com/?spma230r.7195193.1997079397.2.71f6771dJHT2r0 二、接口文档 单片机和模…

Netron 显示每层输入shape

前言 我是用yolov5s直接export的onnx&#xff0c;用netron打卡&#xff0c;发现看不到每层的输入&#xff0c;又不想自己算。 步骤 1.准备好onnx 2 执行以下代码 import onnx onnx_ori"yolov5s.onnx" onnx_show"yolov5s_show.onnx" onnx_graph onnx.l…

MGRE-OSPF接口网络类型实验

OSPF接口网络类型实验 一&#xff0c;实验拓扑 初始拓扑&#xff1a; 最终拓扑&#xff1a; 二&#xff0c;实验要求及分析 要求&#xff1a; 1&#xff0c;R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2&#xff0c;R1/R4/R5为全连的MGRE结构&#xff0c;R…

sd sdxl diffusers GPU 显存 优化

# 使用 fp 16, 显存减少&#xff0c;速度提示 pipe StableDiffusionXLPipeline.from_single_file(modelPath,dtypetorch.bfloat16, variant"fp16", use_safetensorsTrue, load_safety_checkerFalse,device_map"auto")# VAE并发解码&#xff0c;改为串行&a…

九州金榜|孩子青春期应该如何家庭教育?

青春期&#xff0c;是一个人从儿童走向成年的重要过渡阶段&#xff0c;也是心理、生理发生巨大变化的时期。面对这一特殊时期的孩子&#xff0c;家庭教育显得尤为重要。那么&#xff0c;作为家长&#xff0c;我们该如何进行青春期孩子的家庭教育呢&#xff1f;九州金榜家庭教育…

基于springboot酒店管理系统的人事部门管理子系统

基于springboot酒店管理系统的人事部门管理子系统 前言 酒店管理系统的设计与实现-人事部门管理子系统&#xff0c;可以让用户在最短的时间里享受到最好的服务&#xff1b;而开发本系统&#xff0c;又能够提高系统整体工作水平&#xff0c;简化工作程序&#xff0c;这对管理员…

图片壁纸社区app前后端开源小程序源码 取图小程序源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 图片壁纸社区APP前后端开源小程序源码&#xff0c; 修改了开源版的前端样式&#xff0c;变成图片社区&#xff0c;也可以用来作为壁纸。 图片壁纸社区 APP 前后端开源小程序源码&am…

HalconLen1-图块标定

read_image(Image, C:/Users/86173/Desktop/test/2.png)*获取图片大小 get_image_size(Image, Width, Height)*关窗口 dev_close_window()*开窗口 dev_open_window(0, 0, Width, Height, black, WindowHandle)*显示图片 dev_display(Image)*dev_clear_window()*灰度二值化 thre…

新质生产力:数字孪生将如何管好地铁站?

智慧车站建设是现代交通领域的重要发展方向&#xff0c;旨在通过集成先进的信息技术&#xff0c;提升车站的运营效率、安全性及乘客体验。基于既有的综合监控技术&#xff0c;通过集成多种传感器和数据采集设备&#xff0c;实现对车站设备、环境、客流、人员等对象群的智能感知…

项目管理总体计划模板(项目经理干货)

项目管理总体计划模板 1、项目基本信息 2、项目里程碑 3、项目干系人 4、项目团队组织架构管理 5、项目预算管理 6、项目项目任务计划管理 7、问题及风险管理 8、项目周报 9、项目相关要求 软件项目相关全套精华资料包获取方式①&#xff1a;点我获取 获取方式②&#xff1a;本…

基于Canvas实现的简历编辑器

基于Canvas实现的简历编辑器 大概一个月前&#xff0c;我发现社区老是给我推荐Canvas相关的内容&#xff0c;比如很多 小游戏、流程图编辑器、图片编辑器 等等各种各样的项目&#xff0c;不知道是不是因为我某一天点击了相关内容触发了推荐机制&#xff0c;还是因为现在Canvas…
最新文章