蓝桥杯练习日常|c/c++竞赛常用库函数
书接上回......https://blog.csdn.net/weixin_47011416/article/details/145290017
目录
书接上回......https://blog.csdn.net/weixin_47011416/article/details/145290017
1、二分查找
2、lower_bound uper_bound
3、memset()
函数原型
参数说明
返回值
常见用法
4、swap()
5、reverse()
6、unique()
1、二分查找
vector<int> numbers={1.3.7.9};
banary_search(numbers.begin(),numbers.end(),target);在已经排好序的序列中查找特定值,返回bool值。
2、lower_bound uper_bound
vector<int> v={1,5,2,7,9,2,10};
sort(v.begin(),v.end());
for(auto &i:v)cout<<i<<' ';
cout<<'\n';
cout<<(lower_bound(v.begin(),v.end(),
8)-v.begin())<<'\n';
lower_bound(start地址,end地址,x) 返回从开始到结束左闭右开中第一个大于等于x的元素的地址。利用地址-首地址=下标得出下表的值。
upperbound(start地址,end地址,x) 返回左闭右开第一个大于x的元素的地址。
3、memset()
头文件<cstring>,用于将一段内存区域设置为指定的值。
函数原型
c复制代码
void *memset(void *s, int c, size_t n);
参数说明
- s:指向要填充的内存区域的指针。
- c:要设置的值,通常是一个无符号字符。
- n:要被设置为该值的字节数。
返回值
该函数返回一个指向存储区 s
的指针。
常见用法
- 初始化数组:可以使用 memset() 快速地将数组中的所有元素初始化为特定值,例如将一个整数数组清零或设置为某个特定的初始值。
- 初始化结构体:对于结构体变量或结构体数组,可以使用 memset() 将其内存空间初始化为特定值,以便在后续使用中确保数据的一致性和安全性。
- 清空内存区域:通过将 c 设置为0,memset() 可以用来清空一段内存区域,即将所有字节设置为0。这在释放内存之前清理数据结构或避免内存泄漏时特别有用。
#include<bits/stdc++.h>
int main(){
int a[5];
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)cout<<a[i]<<'\n';
return 0;
}
4、swap()
- 功能:用于交换两个对象的值。
- 用法:
swap(a, b);
其中a
和b
是要交换值的两个对象,它们必须是相同的类型。 - 可以用于交换任意种类的变量,基本类型(整数,浮点)和自定义类型(结构体,类对象等)
5、reverse()
- 功能:用于反转一个序列的元素,定义在
<algorithm>
头文件中。包括数组,向量,链表。 - 语法:
template <class BidirectionalIterator> void reverse(BidirectionalIterator first, BidirectionalIterator last);
- 参数:
first
和last
用于指定要转换的数据范围[first, last)
。 - 注意事项:需要双向迭代器来工作,所以可以与
std::vector
、std::deque
和std::list
之类的容器一起使用,但不能用于std::set
和std::map
这样的容器,因为它们的内部是有序的,不能做反转操作。
6、unique()
- 用于除去容器中相邻重复元素的函数(!!必须相邻,如果不相邻,用sort排个序)
- 用法:
iterator unique(iterator it_1, iterator it_2);
,表示对容器中[it_1, it_2)
范围的元素进行去重,返回值是一个迭代器,指向去重后容器中不重复序列的最后一个元素的下一个元素。 - 返回指向去重后范围的尾后迭代器