【蓝桥】常用库函数

ops/2025/3/5 12:01:14/

1、memset()函数

1.1 基本介绍

  1. 定义在头文件<cstring>
  2. 主要作用是对一块内存区域进行设置值的操作

1.2 函数原型

void *memset(void *str, int c, size_t n);
  • str:指向要填充的内存块的指针
  • c:要设置的值。该值以int形式传递,但函数在填充之前会将这个值转换为unsigned char
  • n:要设置的字节数
  • 返回值:返回指向内存块str的指针

1.3 常见用法

1.3.1 初始化数组

可以用来快速地将数组元素设置为0或其他相同的值

1.3.2 清空结构体或类对象

当需要重置结构体或类对象时,可以使用memset()将其所有成员变量设为0

1.3.3 性能优化

对于大量数据的初始化,memset()因为其底层实现通常是高度优化的,可能比手动循环赋值更快

1.4 基础用法

  • 初始化一个整数数组
#include <iostream>
#include <cstring> // 必须包含此头文件int main() {int numbers[5];// 使用 memset 将数组每个元素设置为0// 注意: memset 以字节为单位操作,因此这里每个int(4字节)都被设置为0memset(numbers, 0, sizeof(numbers));// 输出数组内容,验证是否全部被设置为0for(int i = 0; i < 5; ++i) {std::cout << "numbers[" << i << "] = " << numbers[i] << std::endl;}return 0;
}

2、swap()函数

2.1 基本介绍

  1. 定义在头文件<utility>
  2. 主要作用是用于交换两个变量值

2.2 函数原型

void std::swap(T& a, T& b);
  • a:要交换值的第一个变量的引用
  • b:要交换值的第二个变量的引用

2.3 常见用法

2.3.1 交换两个变量的值

最基本的应用场景

2.3.2 交换容器内容

对于STL容器,除了使用通用的swap函数外,还可以调用容器自身的swap方法,这通常是更高效的选择

2.3.3 自定义类型

如果需要对自定义类型进行交换操作,可以通过重载swap函数来提高效率或者实现特定逻辑

2.4 基础用法

2.4.1 基本类型交换

#include <iostream>
#include <utility> // 包含std::swapint main() {int a = 5, b = 10;std::cout << "Before swap: a = " << a << ", b = " << b << std::endl;std::swap(a, b); // 使用std::swap交换a和b的值std::cout << "After swap: a = " << a << ", b = " << b << std::endl;return 0;
}

2.4.2 STL容器交换

#include <iostream>
#include <vector>
#include <utility> // 包含std::swapint main() {std::vector<int> vec1 = {1, 2, 3};std::vector<int> vec2 = {4, 5, 6};std::cout << "Before swap:" << std::endl;std::cout << "vec1 contains:";for(auto& i : vec1) std::cout << ' ' << i;std::cout << "\nvec2 contains:";for(auto& i : vec2) std::cout << ' ' << i;std::cout << std::endl;// 交换vec1和vec2的内容vec1.swap(vec2); // 或者使用std::swap(vec1, vec2);std::cout << "After swap:" << std::endl;std::cout << "vec1 contains:";for(auto& i : vec1) std::cout << ' ' << i;std::cout << "\nvec2 contains:";for(auto& i : vec2) std::cout << ' ' << i;std::cout << std::endl;return 0;
}

3、reverse()函数

3.1 基本介绍

  1. 定义在头文件<algorithm>
  2. 主要作用是用于反转序列容器(如vectorstringdequearray等)中的元素顺序

3.2 函数原型

void reverse(Iterator first, Iterator last);
  • first:要反转范围的初始位置
  • last:要反转范围的结束位置(但不包括last所指向的元素)。换句话说,它是半开区间[first, last)中最后一个元素的下一个位置

3.3 常见用法

3.3.1 反转数组或向量

可以用来快速地将一个数组或向量中的元素顺序颠倒

3.3.2 字符串处理

对于std::string类型的数据,reverse()可以用来反转字符串内容

3.3.3 自定义容器

如果自定义的容器支持双向迭代器,也可以使用reverse()来反转其中的元素

3.4 基础用法

3.4.1 反转std::vector<int>

#include <iostream>
#include <vector>
#include <algorithm> // 包含reverse函数int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::cout << "Original vector: ";for(int i : vec) {std::cout << i << ' ';}std::cout << std::endl;std::reverse(vec.begin(), vec.end()); // 使用reverse函数反转vectorstd::cout << "Reversed vector: ";for(int i : vec) {std::cout << i << ' ';}std::cout << std::endl;return 0;
}

3.4.2 反转std::string

#include <iostream>
#include <string>
#include <algorithm> // 包含reverse函数int main() {std::string str = "hello world";std::cout << "Original string: " << str << std::endl;std::reverse(str.begin(), str.end()); // 使用reverse函数反转字符串std::cout << "Reversed string: " << str << std::endl;return 0;
}

4、unique()函数

4.1 基本介绍

  1. 定义在头文件<algorithm>
  2. 主要作用是用于移除给定范围内的连续重复元素,只保留每个重复序列的第一个实例
  3. 时间复杂度为O(n)

4.2 函数原型

ForwardIt unique(ForwardIt first, ForwardIt last);
ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p);
  • first,last:定义了要处理的元素范围。这个范围是半开区间[first, last),意味着包含 first指向的元素,但不包括last指向的元素
  • BinaryPredicate p:可选参数,用于自定义比较规则,默认使用operator==

4.3 常见用法

4.3.1 移除连续重复项

这是最直接的应用场景,适用于任何支持双向迭代器的容器(如vectordeque等)

4.3.2 结合erase使用

为了实际删除容器中多余的元素,通常会将unique的返回值与erase方法结合使用

4.3.3 自定义比较逻辑

通过提供第三个参数,可以指定不同的比较方式来决定哪些元素被认为是重复的

4.4 基础用法

4.4.1 移除std::vector<int>中的连续重复项

#include <iostream>
#include <vector>
#include <algorithm> // 包含unique和sort函数int main() {std::vector<int> vec = {1, 2, 2, 3, 2, 4, 4, 5};// 首先对vector进行排序,因为unique只能移除相邻的重复项std::sort(vec.begin(), vec.end());// 使用unique移除连续重复项auto last = std::unique(vec.begin(), vec.end());// 删除多余的元素vec.erase(last, vec.end());// 输出结果for(int i : vec) {std::cout << i << " ";}std::cout << std::endl;return 0;
}

4.4.2 使用自定义比较函数

#include <iostream>
#include <vector>
#include <algorithm>bool customCompare(int a, int b) {return (a % 3) == (b % 3); // 自定义比较规则,这里按模3的结果分组
}int main() {std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};// 使用unique配合自定义比较函数auto last = std::unique(vec.begin(), vec.end(), customCompare);// 删除多余的元素vec.erase(last, vec.end());// 输出结果for(int i : vec) {std::cout << i << " ";}std::cout << std::endl;return 0;
}

微语录:不积跬步,无以至千里;不积小流,无以成江海。


http://www.ppmy.cn/ops/163292.html

相关文章

玩转顺序表:用 C 语言实现数据的插入与删除

目录 顺序表的定义 插入元素 删除元素 查找元素 主函数 打印顺序表 完整代码 总结 在这篇博客中&#xff0c;我们将探讨如何使用 C 语言实现一个简单的顺序表&#xff08;也称为动态数组&#xff09;&#xff0c;并实现一些基本操作&#xff0c;包括插入、删除和查找…

ldap放大 DDOS.c

ldap放大汉化源码 安装环境指令: 乌班图/Debian系统: apt install gcc -y centos系统: yum install gcc -y 编译指令: gcc ldap.c -o ldap -pthread -stdgnu99 最后输入 ./ldap 查看使用方法 注意:本脚本完全开源免费,请勿使用任何已编译版本,使用本脚本必须拥有roo…

京东一面:为什么 IDEA 建议去掉 StringBuilder,而要使用 “+” 拼接字符串?

本文已收录至Java面试网站&#xff1a;https://topjavaer.cn 今天咱们来聊聊一个很常见的开发场景&#xff1a;字符串拼接。在日常开发中&#xff0c;字符串拼接几乎是每个 Java 开发者都会用到的操作。但最近&#xff0c;有朋友在面试时被问到一个问题&#xff1a;“为什么 ID…

Zookeeper 及 基于ZooKeeper实现的分布式锁

1 ZooKeeper 1.1 ZooKeeper 介绍 ZooKeeper是一个开源的分布式协调服务&#xff0c;它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效可靠的原语集&#xff0c;并以一系列简单易用的接口提供给用户使用。 原语&#xff1a;操作系统或…

IDEA中Git版本回退终极指南:Reset与Revert双方案详解

目录 前言一、版本回退前置知识二、Reset方案&#xff1a;整体改写历史1、IDEA图形化操作&#xff08;推荐&#xff09;1.1、查看提交历史1.2、选择目标版本1.3、选择回退模式1.3.1、Soft&#xff08;推荐&#xff09;1.3.2、Mixed1.3.3、Hard&#xff08;慎用&#xff09;1.3.…

Qt中如何从头到尾自定义设计一个标题栏

使用qt的widget自定义设计标题栏 头文件TitleBar.h #pragma once#include <QWidget> #include<QLabel> #include<QPushButton>enum ButtonType {MIN_BUTTON 0,MIN_MAX_BUTTON,ONLY_CLOSE_BUTTON };class TitleBar : public QWidget {Q_OBJECTpublic:Titl…

DiffBoost:通过文本引导的扩散模型增强医学图像分割

简介 本推文介绍了一篇来自美国西北大学&#xff0c;机器与混合智能实验室的论文《DiffBoost: Enhancing Medical Image Segmentation via Text-Guided Diffusion Model》&#xff0c;发表在医学图像处理领域的顶级期刊《IEEE Transactions on Medical Imaging》。论文中提出了…

MySQL 数据库安全配置最佳实践

文章目录 MySQL 数据库安全配置最佳实践账户与权限管理账户最小化原则权限最小化配置密码策略强化 认证与访问控制禁用匿名账户启用安全认证 网络安全防护访问源限制禁用远程root访问启用SSL加密 日志审计与监控全量审计配置二进制日志管理 服务端安全加固关键参数配置文件权限…