c++常用库函数

一.sort排序

快排的改进算法,评价复杂度为(nlogn).

1.用法

sort(起始地址,结束地址下一位,*比较函数) [起始地址,结束地址) (左开右闭)

#include<bits/stdc++.h>
using namespace std;
int main()
{//sortvector<int> v;int x;while (cin >> x) v.push_back(x);sort(v.begin(), v.end());for (int num : v) cout << num << ' ';//范围forcout << endl;}

2.自定义函数

sort没有默认参数时,默认为升序,如果想要改为降序,就需要自己写个函数,然后利用回调函数实现。

如果想要小于,参数为(int a,int b,cmp)返回值 return a>b 代表第一个数小于第二个数 即非升序

#include<bits/stdc++.h>
using namespace std;
bool cmp(int a, int b)
{return a > b;
}
int main()
{//sortvector<int> v;int x;while (cin >> x) v.push_back(x);//使用while(cin>>x) 按ctrl+z停止加回车停止输入sort(v.begin(), v.end(),cmp);for (int num : v) cout << num << ' ';//范围forcout << endl;}

 

3.练习

对数组升序然后再降序。

#include<bits/stdc++.h>
using namespace std;
int main()
{//sortvector<int> v;int x;while (cin >> x) v.push_back(x);//使用while(cin>>x) 按ctrl+z停止加回车停止输入sort(v.begin(), v.end());for (int num : v) cout << num << ' ';//范围forcout << endl;for (int i = v.size()-1; i >= 0; i--) cout << v[i] << ' ';cout << endl;}

二.memset()

void*(void* p,int value,size_t num)用于初始化内存块的值,p是要填充的内存块,value为要设置的值(8位二进制数),num为字节数。

1.适用范围

memset是一个字节字节进行初始化的,所以如果你是一个整数比如1的话,那他的内存存储就会是00000001000000010000000100000001结果就会是一个很大的数,而不是每一个数都为1,但如是初始化一个字符数组,那字符数组每个字符都是1个字节那就刚刚好整数只能是-1或0

字符数组

#include<bits/stdc++.h>
using namespace std;
int main()
{char a[4];memset(a, '1', sizeof(a));//cout << a;//因为一开始没有对char初始化没有斜杠零 所以后面会输出烫烫for (int i = 0; i < 4; i++) cout << a[i];}

整型数组出现的情况(只能初始化为0和-1)

#include<bits/stdc++.h>
using namespace std;
int main()
{int a[4];memset(a, 1, sizeof(a));//cout << a;//因为一开始没有对char初始化没有斜杠零 所以后面会输出烫烫for (int i = 0; i < 4; i++) cout << a[i]<<' ';}

三.swap()

swap(T &a,T &b);

交换两个变量的值

int a=10;

int b=20;

swap(a,b);

四.reserve() 

用于反转容器元素,reverse(first,last)[first,last),左闭右开

using namespace std;
int main()
{vector<int> v;int x;while (cin >> x) v.push_back(x);for (int num : v) cout << num << ' ';cout << endl;reverse(v.begin(), v.end());for (int num : v) cout << num<<' ';}

五.unique() 去重函数(唯一函数)

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

first:指向要去重的第一个元素的迭代器;

endlast:最后一个元素的下一个

返回值返回去重后最后一个元素的下一个迭代器比如122333排序完为123233,返回值就是123后的三的地址,之后使用erase就可以后面的那些多余元素。

#include<bits/stdc++.h>
using namespace std;
int main()
{vector<int> v = {1,2,2,3,3,3,4,4,4,4};auto it=unique(v.begin(), v.end());for (int num : v) cout << num << ' ';cout << endl;v.erase(it, v.end());for (int num : v) cout << num<<' ';}

六.next_permutation()和prev_permutation函数

 next_permutation()和prev_permutation函数分别对应生成当前序列的下一个排列、上一个排列。next_permutation他按照字典序(即从大到小排序)对序列进行重新排列,如果存在下一个排列,则将当前序列改为下一个排序,并返回true,如果当前为最后一个排列,则改为第一个排列,并且返回false,prev_permutation及对应上一个排列,存在返回true,反之,改为第一个序列,并返回false。

练习

输出1234的所有全排列

#include<bits/stdc++.h>
using namespace std;
int main()
{vector<int> v = {1,2,3,4};bool flag = true;while (flag){for (int num : v) cout << num;cout << endl;flag = next_permutation(v.begin(), v.end());}//最后一个序列继续的话变为第一个序列cout << endl;//多空一行好分清for (int num : v) cout << num;cout << endl;}

七.binary_search和lower_bound和upper_bound

1.binary_search

binary_search是c++的标准库函数,通过二分查找算法(博客里有单独的一个讲解)来确定是否存在目标元素,返回值为bool

三个参数,第一个左闭右开[left,right),最后一个参数为目标值

#include<bits/stdc++.h>
using namespace std;
int main()
{   //binary_searchvector<int> v = {1,2,3,4};int target = 4;bool found = binary_search(v.begin(), v.end(), target);if (found) cout << "找到了" << endl;else cout << "没找到";
}

 

2.lower_boundn和upper_bound

lower_bound(first,end,x),区间仍为左闭右开,返回值为返回第一个大于等于x的元素地址(不是下标)。

upper_bound(first,end,x),区间也是左闭右开,返回值为第一个大于x的元素地址

由于返回值是一个地址,想要得到下标,就必须减去首地址(v.begin())

解释一下他们名字的含义,lower_bound名为下界,upper_bound为上界,当x为7时候,如下图

例子:

找第一个大于等于8的位置 

#include<bits/stdc++.h>
using namespace std;
int main()
{   //binary_searchvector<int> v = {8,9,5,44,3};//二分查找的前提是单调,先进行排序sort(v.begin(), v.end());cout << (lower_bound(v.begin(), v.end(), 8)-v.begin());
}

 

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

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

相关文章

基础sql

在执行删除操作之前&#xff0c;建议先运行一个 SELECT 查询来确认你要删除的记录。这可以帮助你避免误删数据。 删除字段id默认值为空字符串的所有数据 delete from users where id ; 删除字段id默认值为null的所有数据 delete from users where id is null; 删除字段upd…

msvcp140.dll重新安装的解决方法,msvcp140.dll丢失快速修复教程

msvcp140.dll丢失的问题是许多电脑用户经常遇到的问题。msvcp140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;这个软件包包含了许多Windows系统运行所需的重要文件。当msvcp140.dll丢失时&#xff0c;可能会导致许多应用程序无法正常运行&#xff0c…

基于华为云智慧生活生态链设计的智能鱼缸

一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长&#xff0c;智能鱼缸作为一种结合了科技与自然美的家居装饰品&#xff0c;正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸&#xff0c;它不仅能够提供…

初阶数据结构【2】--顺序表(详细且通俗易懂,不看一下吗?)

本章概述 线性表顺序表顺序表问题与思考彩蛋时刻&#xff01;&#xff01;&#xff01; 线性表 概念&#xff1a;一些在逻辑上成线性关系的数据结构的集合。线性表在逻辑上一定成线性结构&#xff0c;在物理层面上不一定成线性结构。常见的线性表&#xff1a;顺序表&#xff0…

学习文档(6)

Redis数据类型 Redis 常用的数据类型有哪些&#xff1f; Redis 中比较常见的数据类型有下面这些&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散…

影楼即将倒闭!!!!stable diffusion comfyui制作:AI人像摄影专业工作流

最近我们在学习ComfyUI&#xff0c;并用它搭建的摄影写真工作流&#xff0c;只需几张照片即可生成可交付的艺术写真照。 AI写真有以下好处&#xff1a; 创意无限&#xff1a;AI写真可以创造出超越现实的场景和效果&#xff0c;为用户提供更多的创意空间。用户可以通过简单的输…

MySQL 读写分离

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着机票业务不断增长&#xff0c;订单库的读性能遇到了挑战&#xff0c;因此对订单库进行读写分离操作。主要目的是提高数据库的并发性能和可扩展性。当系统的所有写操作效率尚可&#xff0c;读数据请求效率较低时&#xff0c;比如…

快速解决Windows端口被占用

检查占用的端口号,显示9210端口被占用 使用运行打开cmd&#xff0c;直接输入如下命令 netstat -ano | find "9210"可以看到 9210端口执行的进程是PID为26836 知道PID后打开电脑的任务管理器-详细信息,找到PID是26836的进程,可以看到是QQ,关掉就解决了

微软开源项目 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C++软件异常排查从入门到精通系列教程…

路由通信 的 VLAN技术

一、VLAN基础 虚拟局域网&#xff08;Virtual Local Area Network&#xff0c;VLAN&#xff09; 根据管理功能、组织机构或应用类型对交换局域网进行分段而形成的逻辑网络。 交换机最多支持4094个VLAN&#xff0c;其中默认管理VLAN是VLAN1&#xff0c;不能创建&#xff0c;也…

Python爬虫使用示例-古诗词摘录

一、分析需求 目标地址&#xff1a; https://www.sou-yun.cn/Query.aspx?typepoem&id二、提取诗句 import os import re import requests import parsel#url https://www.sou-yun.cn/PoemIndex.aspx?dynastyTang&author14976&typeJie urlhttps://www.sou-yun.…

关于md5强比较和弱比较绕过的实验

在ctf比赛题中我们的md5强弱比较的绕过题型很多&#xff0c;大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。 MD5弱比较 比较的步骤 在进行弱比较时&#xff0c;PHP会按照以下步骤执行&#xff1a; 确定数据类型&#xff1a;检查参与比较的两…

【文心智能体 | AI大师工坊】如何使用智能体插件,完成一款购物类智能体的开发,来体验一下我的智能体『科技君Tom』

目录 1.1、智能体运行效果1.2、创作灵感来源智能体平台拥有个人化且人性化的大致框架&#xff0c;可以让小白也能搭建出一个智能体其次是拥有丰富的插件&#xff0c;可以更加快速的得到自己想要的效果~ 1.3、如何制作智能体常见问题与解决方案关于人设与回复逻辑插件使用模型的…

【02】Windows特殊权限-Trustedinstaller

知识点&#xff1a; “TrustedInstaller” 是 Windows 操作系统中的一个特殊账户&#xff0c;用于管理和保护重要的系统文件。它是 Windows 模块安装程序 (Windows Modules Installer) 的一部分&#xff0c;负责安装、修改和删除 Windows 更新和可选组件。默认情况下&#xff…

【Java SE 】类和对象详解

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1&#xff0c; 面向对象认识 1.1 什么时面向对象 1.2 面向对象和面向过程 1.2.1 一个例子理解对象和过程 1. 对于电脑来说 2. 对于我们人来说 2. 类的定…

linux用户态条件变量和内核态完成变量

如果我们的线程要等一个条件满足之后才可以继续向下执行&#xff0c;这个条件不满足的话&#xff0c;就要等待这个条件。这种场景经常见到&#xff0c;比如我们使用recv接收网络数据的时候&#xff0c;或者使用epoll_wait来等待事件的时候&#xff0c;在默认情况下&#xff0c;…

双指针 — 复写零

目录 1. 题目解析 2. 算法讲解 1.算法原理 2.“异地”操作 3.“就地”操作 误解 正解 从后往前完成复写操作 找到最后一个复写的数 处理边界情况 3. 编写代码 正解顺序 1.找到最后一个复写的数 2.处理边界情况 3.从后往前完成复写操作 性能分析&#xff1a; …

【白话文通俗易懂搞明白并解决】跨域问题

文章目录 跨域出现的场景跨域的定义解决跨域的方法方法一&#xff1a;JSONP方法二&#xff1a;添加响应头方法三&#xff1a;通过nginx代理跨域 跨域过滤器代码示例 跨域出现的场景 在前后端分离项目中&#xff0c;经常会出现跨域问题&#xff0c;表现为&#xff1a; 当在浏览…

拟声 0.37.0 | 拟物风格,超级优美,功能丰富

拟声是一款功能丰富的音视频播放器&#xff0c;支持多种音频来源&#xff0c;并具备独特的歌词弹幕、音源转换、跨设备共享与控制等功能。其创新的LRC歌词编解码器和新拟物风格的UI设计为用户提供了一个全新的视听体验。 大小&#xff1a;36M 百度网盘&#xff1a;https://pan…

7.存储过程中的事务管理(7/10)

1.引言 在现代信息技术快速发展的今天&#xff0c;数据库已经成为存储和管理数据的核心工具。无论是企业级应用、电子商务平台还是个人项目&#xff0c;数据库都扮演着不可或缺的角色。在这些应用中&#xff0c;数据的完整性、一致性和可靠性是至关重要的。这就引出了数据库事…