C/C++算法编程竞赛常用库函数篇:其他重要库函数

目录

前言

一、memset()函数

1.基本介绍与声明

2.代码示例

二、swap()函数

1.基本介绍与声明

2.代码示例

三、reverse()函数

1.基本介绍与声明

2.代码示例

四、unique()函数

1.基本介绍与声明

2.代码示例

总结

库函数篇到此暂告一段落。总而言之,如果你觉得这篇文章还不错,劳烦多多支持一下!码字不易,感谢你的观看!



前言

这个栏目是对我算法学习过程的同步记录,我也希望能够通过这个专栏加深自己对编程的理解以及帮助到更多像我一样想从零学习算法并参加竞赛的同学。在这个专栏的文章中我会结合在编程过程中遇到的各种问题并提出相应的解决方案。当然,如果屏幕前的你有更好的想法或者发现的错误也欢迎交流和指出!不喜勿喷!不喜勿喷!不喜勿喷!那么事不宜迟,我们马上开始吧!


一、memset()函数

1.基本介绍与声明

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

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

第一个参数是一个void*类型的指针(空指针),即可以是指向任意数据类型的指针,在这里指向要设置值的内存块。第二个参数是要修改为的值,通常是一个整数。第三个参数是要修改的内存块长度,以字节为单位。

memset()函数通常用于初始化内存块,将其设为特定的值。需要注意的是,memset()函数对于非字符类型的数组可能产生未定义行为。在处理非字符类型的数组,最好使用C++中的其他方法,如通过循环遍历来初始化数组。

2.代码示例

下面是一段代码示例:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int a[5];
    memset(a, 1, sizeof a);
    for (int i = 0; i < 5; ++i)cout << bitset<32>(a[i]) << endl;
    return 0;
}

结果如下:

00000001000000010000000100000001
00000001000000010000000100000001
00000001000000010000000100000001
00000001000000010000000100000001
00000001000000010000000100000001

我们不妨将值改为-1,看看结果:

11111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111

这是因为-1的补码就是0xFF(全是1)。关于补码,在此可简单理解为 0xFF + 0x01(1) = 0x00(0),-1是1的相反数,则0xFF便是-1的补码。0xFF是一个16进制数(HEX),可以表示为uint32_t

我们恢复为第一次的代码,只将bitset<32>(a[i])改为bitset<16>(a[i]),看看结果:

0000000100000001
0000000100000001
0000000100000001
0000000100000001
0000000100000001

此时便是uint16_t

二、swap()函数

1.基本介绍与声明

swap()函数可以交换任意两个类型的变量。

其接受两个参数,分别为要交换值的变量的第一、第二个变量的引用,函数的声明如下:

swap(T &a, T &b);

2.代码示例

用swap()函数交换两个整数。

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

若要用swap()交换两个数组,如果我们直接将数组当做参数传到里面是没有用的。我们可以交换两者的指针达到互换的目的。代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int a[2] = { 1, 2 };
    int b[3] = { 3, 4, 5 };
    swap(*a, *b);
    cout << a[0] << endl;
    return 0;
}

结果是3,证明交换成功。

三、reverse()函数

1.基本介绍与声明

reverse()函数是一个用于反转容器中元素顺序的函数,其原型定义在<algorithm.h>头文件中。

reverse()函数接受两个参数,将[First, Last)范围内的元素按照相反的顺序重新排列。需要注意的是,reverse()函数只能用于支持双向迭代器的容器。

2.代码示例

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    vector<int> vec = { 1,2,3,4,5 };
    reverse(vec.begin(),vec.end());
    for (int num : vec)cout << num << " ";
    cout << endl;
    return 0;
}

四、unique()函数

1.基本介绍与声明

unique()函数是一个去除容器内相邻重复元素的函数,其原型定义在<algorithm.h>头文件中。

unique()函数将[First, Last)范围内的相邻元素去除,并返回一个指向去重后范围的尾后迭代器。去重后的范围只保留了第一个出现的元素,后续重复的元素都被移除。

如果需要去除所有重复元素,可以先对容器排序,然后再使用unique()函数。

2.代码示例

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    vector<int> vec = { 1,1,2,2,3,3,3,4,4,5 };
    auto it = unique(vec.begin(), vec.end());
    for (int num : vec)cout << num << " ";
    cout << endl;
    return 0;
}

结果为:

1 2 3 4 5 3 3 4 4 5

 


总结

库函数篇到此暂告一段落。总而言之,如果你觉得这篇文章还不错,劳烦多多支持一下!码字不易,感谢你的观看!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值