蓝桥杯C++竞赛常用库函数介绍

文章目录

  • 前言
  • 一、二分查找
      • 1. 二分查找的前提
      • 2.binary_search函数
      • 3.lower_bound函数和upper_bound函数
      • 4.蓝桥杯例题
  • 二、最值查找
      • 1. min和max函数
      • 2.min_element和max_element函数
      • 3.nth_element函数
      • 4.蓝桥杯例题
  • 三、排序
      • 1.sort函数
      • 2.sort自定义比较函数,或lambda表达式(匿名函数)
      • 3.蓝桥杯例题
  • 四、全排列
      • 1.next_permutation函数
      • 2. prev_permutation函数
  • 五、大小写函数
      • 1.islower,isupper函数
      • 2.tolower,toupper函数
  • 六、其他库函数
      • 1.memset 函数
      • 2.swap 函数
      • 3.reverse 函数
      • 4.unique 函数
  • 总结


前言

最近开始准备蓝桥杯C++组的比赛了,是在自己学习过程中的记录,也分享给大家! 一些蓝桥杯C++竞赛常用库函数!


一、二分查找

1. 二分查找的前提

1.数只能对数组进行二分查找
2.这个数组中的元素只能是单调
3.一般是单调递减,单调递增也行(需修改比较函数)

2.binary_search函数

std::binary_search 函数定义在 头文件中,用于在已排序的序列(数组或容器)中查找特定的元素,通过二分查找来确定序列中是否存在目标元素,返回bool值
二分查找的时间复杂度为 O(log n),其中 n 是序列的大小。这是因为在每一次比较中,二分查找将搜索范围减半,直到找到目标值或者搜索范围为空为止。

//使用例程
#include <iostream>
#include <vector>
#include <algorithm> // 包含 <algorithm> 头文件

int main() {
    std::vector<int> vec = {1, 3, 5, 7, 9};

    // 在有序序列中查找目标值 5
    if (std::binary_search(vec.begin(), vec.end(), 5)) {
        std::cout << "目标值 5 存在于序列中" << std::endl;
    } else {
        std::cout << "目标值 5 不存在于序列中" << std::endl;
    }

    return 0;
}

3.lower_bound函数和upper_bound函数

lower_bound(st,ed,x)返回地址[st,ed)中第一个大于等于x的元素的地址(迭代器)。
upper_bound(st,ed,x)返回地址[st,ed)中第一个大于x的元素的地址(迭代器)。

//例子
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 2, 3, 3, 3, 5};

    // 使用 lower_bound 查找第一个大于等于 3 的位置
    auto lower = std::lower_bound(vec.begin(), vec.end(), 3);
    std::cout << "lower_bound: " << std::distance(vec.begin(), lower) << std::endl;
	//std::distance(vec.begin(), lower) 是一个 C++ 标准库中的算法函数
	//用于计算两个迭代器之间的距离
	//vec.begin() 是容器 vec 的起始迭代器
	//lower 是 std::lower_bound 函数返回的迭代器,指向第一个大于等于目标值的位置。
	//等价于lower - vec.begin() 
	
    // 使用 upper_bound 查找第一个大于 3 的位置
    auto upper = std::upper_bound(vec.begin(), vec.end(), 3);
    std::cout << "upper_bound: " << std::distance(vec.begin(), upper) << std::endl;

    return 0;
}

4.蓝桥杯例题

在这里插入图片描述

二、最值查找

1. min和max函数

std::min 和 std::max 是 C++ 标准库中的两个算法函数,用于返回两个值中的最小值和最大值。它们在 <algorithm> 头文件中声明。时间复杂度为 O(n)

#include <iostream>
#include <algorithm>

int main() {
    int a = 10;
    int b = 20;
 

    // 返回两个值中的较小值
    int min_val = std::min(a, b);
    std::cout << "最小值:" << min_val << std::endl;

    // 返回两个值中的较大值
    int max_val = std::max(a, b);
    std::cout << "最大值:" << max_val << std::endl;
	
	//也可以返回一个列表中最大最小的值,用大括号{}括起来
	std::cout << "列表中的最大值:" << std::max({1, 2, 3, 4, 5}) << std::endl;

    return 0;
}

2.min_element和max_element函数

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

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

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6};

    // 返回容器中的最小值对应的迭代器
    auto min_it = std::min_element(vec.begin(), vec.end());
    std::cout << "最小值:" << *min_it << std::endl;

    // 返回容器中的最大值对应的迭代器
    auto max_it = std::max_element(vec.begin(), vec.end());
    std::cout << "最大值:" << *max_it << std::endl;

    return 0;
}

3.nth_element函数

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

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

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6};

    // 将容器中的第5个元素置于正确的位置 ,排序后的容器第五个是正确位置的
    std::nth_element(vec.begin(), vec.begin() + 4, vec.end());

    // 输出排序后的结果
    std::cout << "第5个元素:" << vec[4] << std::endl;
    std::cout << "排序后的容器:" << std::endl;
    for (const auto& elem : vec) {
        std::cout << elem << " ";  //
    }
    std::cout << std::endl;

    return 0;
}

在这里插入图片描述

4.蓝桥杯例题

在这里插入图片描述

三、排序

1.sort函数

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

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6};

    // 对容器中的元素进行排序
    std::sort(vec.begin(), vec.end());

    // 输出排序后的结果
    std::cout << "排序后的容器:" << std::endl;
    for (const auto& elem : vec) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

2.sort自定义比较函数,或lambda表达式(匿名函数)

如果需要自定义排序规则,可以通过提供一个比较函数或者 lambda 函数来告诉 std::sort 函数如何进行排序。

#include <iostream>
#include <vector>
#include <algorithm>

// 自定义比较函数,按照元素的绝对值进行排序
bool compareAbsoluteValue(int a, int b) {
    return std::abs(a) < std::abs(b);
}

int main() {
    std::vector<int> vec = {3, -1, 4, -6, 5, 9, -2, 6};

    // 使用自定义比较函数对容器中的元素进行排序
    std::sort(vec.begin(), vec.end(), compareAbsoluteValue);
    /* lambda表达式(匿名函数)
    std::sort(vec.begin(), vec.end(), [](int a, int b) {
    return std::abs(a) < std::abs(b);
	});
	*/

    // 输出排序后的结果
    std::cout << "排序后的容器:" << std::endl;
    for (const auto& elem : vec) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

3.蓝桥杯例题

在这里插入图片描述

四、全排列

1.next_permutation函数

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

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

#include <iostream>
#include <vector>
#include <algorithm> // 包含 next_permutation 函数

int main() {
    std::vector<int> vec = {1, 2, 3};

    // 打印初始排列
    std::cout << "初始排列: ";
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 生成并打印下一个排列,直到没有下一个排列为止
    while (std::next_permutation(vec.begin(), vec.end())) {
        std::cout << "下一个排列: ";
        for (int num : vec) {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

2. prev_permutation函数

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

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

#include <iostream>
#include <vector>
#include <algorithm> // 包含 prev_permutation 函数

int main() {
    std::vector<int> vec = {3, 2, 1};

    // 打印初始排列
    std::cout << "初始排列: ";
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 生成并打印上一个排列,直到没有上一个排列为止
    while (std::prev_permutation(vec.begin(), vec.end())) {
        std::cout << "上一个排列: ";
        for (int num : vec) {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

五、大小写函数

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。

#include <iostream>
#include <cctype> // 包含 islower 函数

int main() {
    char c = 'a';

    // 检查字符 c 是否为小写字母
    if (islower(c)) {
        std::cout << c << " 是小写字母" << std::endl;
    } else {
        std::cout << c << " 不是小写字母" << std::endl;
    }
    

    // 检查字符 c 是否为大写字母
    if (isupper(c)) {
        std::cout << c << " 是大写字母" << std::endl;
    } else {
        std::cout << c << " 不是大写字母" << std::endl;
    }

    return 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 自身。

#include <iostream>
#include <cctype> // 包含 tolower 函数

int main() {
    char c = 'A';
    char d = 'b';

    // 将字符 c 转换为小写形式
    char lowercase_c = tolower(c);

    std::cout << "字符 " << c << " 转换为小写形式为 " << lowercase_c << std::endl;


	// 将字符 d 转换为大写形式
    char uppercase_d = toupper(d);

    std::cout << "字符 " << d << " 转换为大写形式为 " << uppercase_d << std::endl;
    return 0;
}

六、其他库函数

1.memset 函数

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

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

#include <iostream>
#include <cstring> // 包含 memset 函数

int main() {
    char str[] = "Hello, world!";
    int size = sizeof(str);

    // 将 str 数组的内容全部设置为 'A'
    memset(str, 'A', size);

    std::cout << str << std::endl; // 输出 "AAAAAAAAAAAAAA"

    return 0;
}

2.swap 函数

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

#include <iostream>
#include <algorithm> // 包含 swap 函数

int main() {
    int a = 10;
    int b = 20;

    // 交换 a 和 b 的值
    std::swap(a, b);

    std::cout << "a: " << a << std::endl; // 输出 "20"
    std::cout << "b: " << b << std::endl; // 输出 "10"

    return 0;
}

3.reverse 函数

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

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

#include <iostream>
#include <vector>
#include <algorithm> // 包含 reverse 函数

int main() {
    std::vector<int> vec = {1, 7, 3, 6, 5};

    // 反转容器中的元素顺序
    std::reverse(vec.begin(), vec.end());

    // 输出反转后的结果
    std::cout << "反转后的容器:" << std::endl;
    for (const auto& elem : vec) {
        std::cout << elem << " ";  //5 6 3 7 1
    }
    std::cout << std::endl;

    return 0;
}

4.unique 函数

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

ForwardIterator unique(ForwardIterator first, ForwardIterator last);
first 和 last:表示要处理的范围的起始和结束迭代器(包含 first,但不包含 last)。
std::unique 函数用于移除范围 [first, last) 中相邻重复的元素,只保留每个不重复元素的第一个出现,并返回一个指向新的逻辑结尾的迭代器,指向不重复元素的下一个位置。

#include <iostream>
#include <vector>
#include <algorithm> // 包含 unique 函数

int main() {
    std::vector<int> vec = {1, 2, 2, 3, 6, 3, 3, 6, 6, 4, 5, 5};

    // 移除容器中相邻重复的元素
    auto new_end = std::unique(vec.begin(), vec.end());

    // 输出处理后的容器内容
    std::cout << "处理后的容器:" << std::endl;
    for (auto it = vec.begin(); it != new_end; ++it) {
        std::cout << *it << " "; //1 2 3 6 3 6 4 5
    }
    std::cout << std::endl;

    return 0;
}

总结

以上就是本章的介绍,唐怡佳继续加油!也希望大家都能取得好的成绩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/404820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金和OA UploadFileBlock接口任意文件上传漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 1. 产品简介 金和数字化智能办公平台&#xff08;简称JC6&#xff09;是…

运维SRE-06 阶段性复习软件管理体系

那些年运维必会操作-第一弹 操作 文件&#xff1a;增删改查 增&#xff1a;touch,vim,>,>>,cp删除&#xff1a;rm修改&#xff1a;内容&#xff1a;vi/vim,>,>> 文件名&#xff1a;mv查看&#xff1a;内容&#xff1a;cat/vim/less/more/head/tail/sed/awk/…

编写LLVM Pass的一个小问题

在阅读官方文档时发现一个很有趣的细节&#xff0c;官方给出了一个测试用例&#xff0c;此处有一个小问题&#xff08;%无法复制&#xff09;。但是我在使用自己编译的ll文件时&#xff0c;我发现该pass无法正常使用。最后经过测试发现是利用-O0编译产生的ll文件有optnone的fla…

学生成绩管理系统(C语言课设 )

这个学生成绩管理系统使用C语言编写&#xff0c;具有多项功能以方便管理学生信息和成绩。首先从文件中读取数据到系统中&#xff0c;并提供了多种功能&#xff08;增删改查等&#xff09;选项以满足不同的需求。 学生成绩管理系统功能: 显示学生信息增加学生信息删除学生信息…

Spring Security 重点解析

Spring Security 重点解析 文章目录 Spring Security 重点解析1. 简介2. 依赖3. 登录认证3.1 登录校验流程3.2 Spring Security 默认登录的原理3.2.1 Spring Security 完整流程3.2.2 登录逻辑探究 3.3 自定义改动3.3.1 自定义用户密码校验3.3.2 自定义 UserDetails 获取方式 F1…

C++多线程同步(上)

多线程同步 引言总述详情互斥锁示例运行结果分析条件变量示例一实现分析优化运行结果示例二实现代码运行结果示例三实现代码运行结果读写锁示例实现代码注意分析运行结果附言实现运行结果运行结果个人心得引言 项目中使用多线程,会遇到两种问题,一种是对共享资源的访问时需要…

kafka和ZK的关系

zk相当于是kafka的一个基础设施 Kafka是一种高吞吐量、可扩展的分布式发布订阅消息系统&#xff0c;ZooKeeper是一个分布式协调服务&#xff0c;用于管理和协调分布式系统中的各种资源 Zookeeper&#xff1a;管理broker&#xff0c;consumer 创建broker后&#xff0c;向zk注册…

Redis和Mysql如何保证数据一致性

一般情况下&#xff0c;Redis用来实现应用和数据库之间读操作的缓存层&#xff0c;主要目的是减少数据 库IO&#xff0c;还可以提升数据的IO性能。 这是它的整体架构。 当应用程序需要去读取某个数据的时候&#xff0c;首先会先尝试去Redis里面加载&#xff0c;如果命中就 直…

基于Python3的数据结构与算法 - 04 快速排序

一、快速排序思路 快速排序特点&#xff1a;快 步骤&#xff1a; 取一个元素p&#xff08;第一个元素&#xff09;&#xff0c;使元素p归为&#xff1b;列表被p分成两部分&#xff0c;左边都比p小&#xff0c;右边都比p大&#xff1b;递归完成排序。 因此我们可以得到快速排…

kali xrdp

Kali Linux 使用远程桌面连接——xrdp&xfce_kali xfce桌面-CSDN博客 Ubuntu/Debian/Kali xrdp远程桌面黑屏/空屏/无画面解决办法 - 知乎 (zhihu.com) sudo apt-get install xrdp -y sudo apt-get install xfce4 -ysudo systemctl enable xrdp --now systemctl status xrd…

自动化行业文件数据\资料防泄密软件——天锐绿盾|@德人合科技

天锐绿盾是一款自动化行业文件数据防泄密软件&#xff0c;由德人合科技提供。该软件采用动态加解密技术&#xff0c;能够有效防止公司内部数据泄密&#xff0c;同时支持各种文件格式加密&#xff0c;如CAD、OFFICE、PDF、图纸等。 PC端&#xff1a;https://isite.baidu.com/sit…

C语言-数组指针与指针数组

一、简介 对于使用C语言开发的人来说&#xff0c;指针&#xff0c;大家都是非常熟悉的。数组&#xff0c;大家也同样熟悉。但是这两个组合到一起的话&#xff0c;很多人就开始蒙圈了。这篇文章&#xff0c;就详细的介绍一下这两个概念。 指针数组和数组指针&#xff0c;听起来非…

为什么0.1+0.2不等于0.3

一、JS内部的计算是以二进制形式进行的 js里整数和小数转为二进制形式的方法是不一样的&#xff1a; 二、Number类型使用IEEE754标准64位存储 双精度浮点数&#xff08;double类型&#xff09;为每个数分配64位空间&#xff0c;并以科学计数法的方式存储&#xff1a; 那么对于…

如何使用Inno Setup制作Unity构建程序的Windows安装程序

1. 准备 &#xff08;1&#xff09;准备好Unity构建的程序集合 必须包括&#xff1a; Data文件夹&#xff08;xxx_Data&#xff09; Mono文件夹&#xff08;MonoBleedingEdge&#xff09; 打包的应用程序文件&#xff08;xxx.exe&#xff09; Unity播放器dll文件&#xff…

centos7部署nfs+keepalived+drbd

一、项目需求描述 现在使用的架构是nfskeepalivedrsyncsersync&#xff0c;目前这套架构存在主从nfs节点数据同步不一致问题&#xff0c;大概会有 120s左右的数据延长同步时间&#xff0c;需要提供优化的自动化方案。 二、现有方案缺点 1、切换不能保证主从节点数据一致。 2、…

每日面经02

1.用过哪些集合&#xff1f;hashmap扩容&#xff1f;如果<string>如何查找&#xff1f;散列函数用什么散列为什么大小是2的幂次&#xff1f;如果是key 为abc怎么散列&#xff1f;如何知道key不存在&#xff1f;默认大小是否可以修改 &#xff0c;改为30 、32 可以不&…

【MySQL初阶】索引与事务

1. 索引 1.1 索引基本概念 1.1.1 索引介绍 索引(index)&#xff1a;是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或者多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。&#xff08;具体细节在My…

蓝桥杯DP算法——区间DP(C++)

根据题意要求的是将石子合并的最小权值&#xff0c;我们可以根据DP思想使用二维数组f[i,j]来存放所有从第i堆石子到第j堆石子合并成一堆石子的合并方式。 然后由第二个图所示&#xff0c;我们可以将i到j区间分成两个区间&#xff0c;因为将i到j合并成一个区间的前一步一定是合…

DecBBox(Decode Bounding Box)的软件实现

在深度学习中&#xff0c;"decbbox" 通常指的是 "Decode Bounding Box"&#xff0c;即解码边界框。这是在目标检测任务中常见的一个步骤&#xff0c;用于将网络输出的边界框参数&#xff08;通常是相对于某种参考框的偏移量或者缩放参数&#xff09;转换为…

ico图标是什么意思?ico图标怎么生成?如何在线制作ico图标?

我们在浏览器浏览网页时或收藏某网页时&#xff0c;经常看到有些网页标题前面有一个图标&#xff0c;有些是logo&#xff0c;有些是其他图标&#xff0c;其实这种图标就是网站的favicon.ico图标&#xff0c;也就是我们平时大家所说ico图标。 什么是favicon.ico图标&#xff1f…