【蓝桥】常用库函数

news2025/3/5 5:22:33

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字节)都被设置为0
    memset(numbers, 0, sizeof(numbers));
    
    // 输出数组内容,验证是否全部被设置为0
    for(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::swap

int 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::swap

int 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函数反转vector

    std::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.coloradmin.cn/o/2309818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03.03 QT

1.在注册登录的练习里面&#xff0c;追加一个QListwidget 项目列表 要求:点击注册之后&#xff0c;将账号显示到 1istwidget上面去 以及&#xff0c;在listwidget中双击某个账号的时候&#xff0c;将该账号删除 Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWi…

华为云 | 快速搭建DeepSeek推理系统

DeepSeek&#xff08;深度求索&#xff09;作为一款国产AI大模型&#xff0c;凭借其高性能、低成本和多模态融合能力&#xff0c;在人工智能领域崛起&#xff0c;并在多个行业中展现出广泛的应用潜力。 如上所示&#xff0c;在华为云解决方案实践中&#xff0c;华为云提供的快速…

BUUCTF [BJDCTF2020]EasySearch1

写一篇文章来学习一下 ssi 注入 以及 dirmap 工具的使用 看到这两个框框没什么想法&#xff0c;边探索边扫下目录吧。显示前端报错&#xff0c;先禁用了js&#xff0c;然后又尝试抓了下包&#xff0c;没有发现什么&#xff0c;只好看看扫出来的目录了&#xff0c;最终扫出来了…

探秘基带算法:从原理到5G时代的通信变革【五】CORDIC算法

文章目录 2.4 CORDIC算法2.4.1 CORDIC算法的基本原理2.4.2 方法论与分类体系旋转模式矢量模式线性模式 2.4.3 **CORDIC 算法中的误差来源****角度逼近误差的分析****缩放效应误差的分析****精度需求与迭代次数的关系****常见应用场景下的迭代次数建议****总结** 2.4.4优缺点分析…

FPGA学习篇——Verilog学习2

1 系统函数 Verilog 语言中预先定义了一些任务和函数&#xff0c;用于完成一些特殊的功能&#xff0c;它们被称为系统任务和系统函数&#xff0c;这些函数大多数都是只能在 Testbench 仿真中使用的&#xff0c;使我们更方便的进行验证。 1.1 时间预编译指令及延时 时间精度&a…

51单片机编程学习笔记——74HC245八路三态输出双向收发器

大纲 组成电源引脚和地引脚使能输入端DIR&#xff08;T/R&#xff09;引脚A端和B端 工作原理数据传输方向控制使能控制 在单片机系统里&#xff0c;单片机的 I/O 口驱动能力往往有限。当需要连接较多外部设备或者负载较大时&#xff0c;就可能出现信号传输不稳定的问题。74HC24…

C++:类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

DeepSeek集成到VScode工具,让编程更高效

DeepSeek与VScode的强强联合&#xff0c;为编程效率树立了新标杆。 DeepSeek&#xff0c;一款卓越的代码搜索引擎&#xff0c;以其精准的索引和高速的检索能力&#xff0c;助力开发者在浩瀚的代码海洋中迅速定位关键信息。 集成至VScode后&#xff0c;开发者无需离开熟悉的编辑…

PPT 小黑第38套

对应大猫40 幻灯片母板-最后一页-重命名为奇数页 奇偶页-点中标题-形状格式-形状填充-青色 最后一页页码左对齐 更换幻灯片背景&#xff1a;设计-设置背景格式-图片填充 【开始】-段落居中&#xff0c;对齐文本-中部对齐&#xff0c;排列-对齐-底端&#xff0c;-再水平居中…

[Web 安全] PHP 反序列化漏洞 —— PHP 魔术方法

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 魔术方法 - 简介 - PHP 魔术方法 - 简单教程&#xff0c;简单编程PHP 中&#xff0c;以两个下划线 ( __ ) 开头方法称之为 「 魔术方法 」 这些 「 魔术方法 」 在 [PHP](/l/yufei/php…

基于Matlab的多目标粒子群优化

在复杂系统的设计、决策与优化问题中&#xff0c;常常需要同时兼顾多个相互冲突的目标&#xff0c;多目标粒子群优化&#xff08;MOPSO&#xff09;算法应运而生&#xff0c;作为群体智能优化算法家族中的重要成员&#xff0c;它为解决此类棘手难题提供了高效且富有创新性的解决…

20250303-代码笔记-class CVRPTester

文章目录 前言一、class CVRPTester:__init__(self,env_params,model_params, tester_params)1.1函数解析1.2函数分析1.2.1加载预训练模型 1.2函数代码 二、class CVRPTester:run(self)函数解析函数代码 三、class CVRPTester:_test_one_batch(self, batch_size)函数解析函数代…

C++学习之C++初识、C++对C语言增强、对C语言扩展

一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 &#xff0c;理解为打开一个房间&#xff0c;房间里有我们所需…

关于虚拟环境中遇到的bug

conda和cmd介绍 介绍 Conda 概述&#xff1a; Conda是一个开源包管理系统和环境管理系统&#xff0c;尤其适用于Python和R语言的开发环境。它允许用户创建独立的虚拟环境&#xff0c;方便地管理依赖包和软件版本。 特点&#xff1a; 环境管理&#xff1a;可以创建、导入、导…

【网络安全 | 渗透测试】GraphQL精讲一:基础知识

未经许可,不得转载, 文章目录 GraphQL 定义GraphQL 工作原理GraphQL 模式GraphQL 查询GraphQL 变更(Mutations)查询(Queries)和变更(Mutations)的组成部分字段(Fields)参数(Arguments)变量别名(Aliases)片段(Fragments)订阅(Subscriptions)自省(Introspecti…

什么是JTAG、SWD?

一、什么是JTAG&#xff1f; JTAG&#xff08;Joint Test Action Group&#xff0c;联合测试行动小组&#xff09;是一种国际标准测试协议&#xff0c;常用于芯片内部测试及对系统进行调试、编程等操作。以下从其起源、工作原理、接口标准、应用场景等方面详细介绍&#xff1a…

如何在Apple不再支持的MacOS上安装Homebrew

手头有一台2012年产的Macbook Pro&#xff0c;系统版本停留在了10.15.7&#xff08;2020年9月24日发布的&#xff09;。MacOS 11及后续的版本都无法安装到这台老旧的电脑上。想通过pkg安装Homebrew&#xff0c;发现Homebrew releases里最新的pkg安装包不支持MacOS 10.15.7&…

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火&#xff0c;试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下&#xff0c;在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库&#xff0c;实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

Java面试第七山!《MySQL索引》

一、索引的本质与作用 索引是帮助MySQL高效获取数据的数据结构&#xff0c;类似于书籍的目录。它通过减少磁盘I/O次数&#xff08;即减少数据扫描量&#xff09;来加速查询&#xff0c;尤其在百万级数据场景下&#xff0c;索引可将查询效率提升数十倍。 核心作用&#xff1a;…

DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…