C++常用库函数介绍,不定期更新

常用函数

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加



前言

提示:这里可以添加本文要记录的大概内容:


一、查找

1、二分查找binary_search()

  • 只能对数组进行查找
  • sort 排序后在使用binary-search查找函数
    std::binary-search函数定义在algorithm头文件中,用于在已排序的数组或容器如vector中查找特定元素,通过二分查找来确定序列中是否存在目标元素,返回bool型,时间复杂度O(longn)

bool binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp)
返回值:bool

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
	vector<int> v= {1,5,4,3,8,-50};
	sort(v.begin(),v.end());
	if(binary_search(v.begin(),v.end(),4)) {
		cout<<"find"<<endl;
	}
	return 0;
}

2、lower_bound()函数和upper_bound()函数

二者都是利用二分查找的方法在一个排序好的数组中进行查找
在从小到大的排序中:
lower_bound(begin,end,val):从数组的begin位置到end-1位置二分查找第一个大于或等于val的数组,找到返回该数字的地址,不存在则返回end,通过该返回的地址减去其实地址begin,得到该数字在数组中的下标。
upper_bound(begin,end,val):从数组的begin位置到end-1位置二分查找第一个大于val的数组,找到返回该数字的地址,不存在则返回end,通过该返回的地址减去其实地址begin,得到该数字在数组中的下标。

在从大到小的排序中:
lower_bound(begin,end,val):从数组的begin位置到end-1位置二分查找第一个小于或等于val的数组,找到返回该数字的地址,不存在则返回end,通过该返回的地址减去其实地址begin,得到该数字在数组中的下标。
upper_bound(begin,end,val):从数组的begin位置到end-1位置二分查找第一个小于val的数组,找到返回该数字的地址,不存在则返回end,通过该返回的地址减去其实地址begin,得到该数字在数组中的下标。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {

	vector<int> v2= {2,6,-4,2,90};
	sort(v2.begin(),v2.end()); //{-4,2,2,6,90}
	
	int pos1=lower_bound(v2.begin(),v2.end(),2)-v2.begin();
	int pos2=upper_bound(v2.begin(),v2.end(),2)-v2.begin();
	cout<<pos1<<"  "<<v2[pos1]<<endl;//1 2
	cout<<pos2<<"  "<<v2[pos2]<<endl;//3 6

	return 0;
}

3、最值查找 min_element()、max_element()

std::min_element std::max_element是 C++ 标准库中的两个算法函数,用于在容器中查找最小值和最大值对应的迭代器。它们在 <algorithm> 头文件中声明。时间复杂度为 O(n)
注意它返回的是迭代器,同begin(),end()

std::min_element(first, last)
std::max_element(first, last)
first 和last:表示要查找的范围的起始和结束迭代器(包含 first,但不包含 last)。[first, last)


4、nth_element()函数

std::nth_element 是 C++ 标准库中的一个算法函数,用于对容器中的元素进行部分排序,使得指定位置的元素处于排序后的正确位置。它在 <algorithm> 头文件中声明。

inline void    nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,_RandomAccessIterator __last, _Compare __comp)

std::nth_element 函数对范围 [first, last) 中的元素进行部分排序,使得迭代器 nth 指向的元素处于排序后的正确位置。
换句话说,nth 之前的元素都不大于 nth位置的元素,nth 之后的元素都不小于 nth 位置的元素。但是,nth 位置的元素不一定是整个范围中的第 nth 小的元素。

二、排序

1、sort()函数

std::sort 是 C++ 标准库中的一个算法函数,用于对容器中的元素进行排序。它在<algorithm>头文件中声明。
first last:表示要排序的范围的起始和结束迭代器(包含 first,但不包含 last)。
std::sort 函数对范围 [first, last) 中的元素执行排序操作。默认情况下,它使用 < 运算符来比较元素的大小。如果需要自定义排序规则,可以提供一个比较函数或者 lambda 函数作为额外参数。

void sort(_RandomAccessIterator __first, _RandomAccessIterator __last,_Compare __comp)

三、全排列

1、next_permutation()函数

std::next_permutation是 C++ 标准库中的一个算法函数,用于生成给定序列的下一个排列。它在<algorithm> 头文件中声明。

bool next_permutation(_BidirectionalIterator __first,_BidirectionalIterator __last, _Compare __comp)
返回值:bool类型
first 和 last:表示要处理的范围的起始和结束迭代器(包含 first,但不包含 last)。
std::next_permutation 函数会重新排列范围 [first, last) 中的元素,生成当前排列的下一个排列。如果存在下一个排列,则函数返回 true,否则返回 false。如果 first 和 last 之间的元素已经按字典序降序排列(即当前排列是最后一个排列),那么函数将重新排列这些元素为第一个排列,并返回 false。

在这里插入代码片

2、pre_premutation()函数

std::prev_permutation 是 C++ 标准库中的一个算法函数,用于生成给定序列的上一个排列。它在<algorithm>头文件中声明。

bool prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last)
返回值:bool类型
first 和 last:表示要处理的范围的起始和结束迭代器(包含 first,但不包含 last)。
std::prev_permutation 函数会重新排列范围 [first, last) 中的元素,生成当前排列的上一个排列。如果存在上一个排列,则函数返回 true,否则返回 false。如果 first 和 last 之间的元素已经按字典序升序排列(即当前排列是第一个排列),那么函数将重新排列这些元素为最后一个排列,并返回 false。

四 大小写函数

1、判断大小写函数islower(),isupper()

islower() 和 isupper() 是 C++ 标准库中的字符处理函数,用于检查字符是否为小写字母和大写字母。它在<cctype>头文件中声明。

int islower(int c);
c:表示要检查的字符,通常以整数形式传入。
islower 函数用于检查字符 c是否为小写字母。如果 c 是小写字母,则返回非零值(通常为 1),否则返回 0。

int isupper(int c);
c:表示要检查的字符,通常以整数形式传入。
isupper 函数用于检查字符 c是否为大写字母。如果 c 是大写字母,则返回非零值(通常为 1),否则返回 0。

2、大小写转换函数 tolower(),toupper()

tolower()toupper() 是 C++ 标准库中的字符处理函数,用于将字符转换为小写和大写形式。它在 <cctype> 头文件中声明。

int tolower(int c);
c:表示要转换的字符,通常以整数形式传入。
tolower 函数用于将字符 c 转换为小写形式。如果c 是大写字母,则返回相应的小写字母;否则,返回 c 自身。
int toupper(int c);
c:表示要转换的字符,通常以整数形式传入。
toupper 函数用于将字符 c 转换为大写形式。如果 c是小写字母,则返回相应的大写字母;否则,返回 c 自身。

1、memset() 函数

memset 是 C/C++ 标准库中的一个函数,用于将一段内存区域的内容设置为指定的值。它在 头文件中声明。

memset 函数将指针 ptr 开始的连续 num 个字节的内存内容都设置为 value。
void* memset(void* ptr, int value, size_t num);
ptr:表示指向要填充的内存区域的指针。
value:表示要设置的值,以整数形式传入。
num:表示要设置的字节数。

2、swap()函数

std::swap() 是 C++ 标准库中的一个函数模板,用于交换两个值。它在 <algorithm> 头文件中声明。
std::swap() 函数用于交换 a 和 b 两个值。它可以用于任何数据类型,包括基本数据类型(如整数、浮点数)和自定义类型(如类对象)。

3、reverse 函数

std::reverse 是 C++ 标准库中的一个算法函数,用于反转容器中元素的顺序。它在 <algorithm> 头文件中声明。

void reverse(BidirectionalIterator first, BidirectionalIterator last);
first 和 last:表示要反转的范围的起始和结束迭代器(包含 first,但不包含 last)。
std::reverse 函数用于反转范围 [first, last) 中的元素的顺序。它逆序地重新排列容器中的元素,即将第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,以此类推,直到中间位置。

4、unique 函数

std::unique 是 C++ 标准库中的一个算法函数,用于移除容器中相邻重复的元素,并返回指向新的逻辑结尾的迭代器。它在 <algorithm> 头文件中声明。

ForwardIterator unique(ForwardIterator first, ForwardIterator last);
first 和 last:表示要处理的范围的起始和结束迭代器(包含 first,但不包含 last)。
std::unique 函数用于移除范围 [first, last) 中相邻重复的元素,只保留每个不重复元素的第一个出现,并返回一个指向新的逻辑结尾的迭代器,指向不重复元素的下一个位置。但是注意这里并没有删除元素,只是把元素移到了末尾。
sort()排序后,使用unique()获取去重以后vector中没有重复元素的下一个位置的迭代器pos。使用erase()擦除无意义的部分,或直接输出v.begin(),pos

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
	vector<int> v= {1,5,6,6,12,2,2,5};
	sort(v.begin(),v.end());
	auto pos=unique(v.begin(),v.end());//1 2 5 6 12 6 6 12
	for(auto i=v.begin();i<pos;i++){
		cout<<*i<<" "; //1 2 5 6 12
	}
	return 0;
}

总结

提示:这里对文章进行总结:

参考:
C++ 之vector元素去重unique()
蓝桥杯C++竞赛常用库函数介绍

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alpha贝塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值