【C++提高编程-11】----C++ STL常用集合算法

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页:@一伦明悦-CSDN博客

✍🏻 作者简介 C++软件开发、Python机器学习爱好者

🗣️ 互动与支持💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,

点赞加收藏支持我,点击关注,一起进步!

前言

    在C++ STL(标准模板库)中,有几个常用的集合算法可以用来操作集合(如std::setstd::unordered_set):

正文

01-常用集合算法之set_intersection用法

       std::set_intersection是一个C++标准库中用于计算两个已排序范围的交集的算法。它将交集的结果存储在第三个范围中,这个范围必须事先被分配足够的空间来存储结果。

以下是std::set_intersection的典型用法和详细解释:

#include <algorithm> // for std::set_intersection
#include <vector>    // for std::vector
#include <iostream>  // for outputint main() {// 定义两个已排序的输入集合std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {3, 4, 5, 6, 7};// 定义一个输出集合,用于存储交集结果std::vector<int> intersection;// 使用 std::back_inserter 来避免手动管理容量// std::set_intersection 会根据需要自动增加 intersection 的容量std::set_intersection(set1.begin(), set1.end(),set2.begin(), set2.end(),std::back_inserter(intersection));// 输出交集结果for (int num : intersection) {std::cout << num << ' ';}std::cout << std::endl;return 0;
}

在上面的代码中,我们定义了两个已排序的std::vector集合set1set2。然后我们使用std::set_intersection算法来计算它们的交集,并将结果存储在另一个std::vector``intersection中。

std::set_intersection的参数解释:

  1. set1.begin()set1.end():这些是set1的开始和结束迭代器,它们定义了第一个输入范围的边界。

  2. set2.begin()set2.end():这些是set2的开始和结束迭代器,它们定义了第二个输入范围的边界。

  3. std::back_inserter(intersection):这是一个输出

下面给出具体代码分析应用过程:

这段代码演示了如何使用 std::set_intersection 算法来计算两个向量 v1 和 v2 的交集,并将结果存储在目标向量 vTarget 中。

让我们逐步解释这段代码:

  1. 头文件包含和命名空间

    #include <vector>
    #include <algorithm>
    #include <iostream> // 没有在代码中显示,但通常需要用来输出
    using namespace std;
    

    这些头文件包含了向量 (vector) 和算法 (algorithm) 所需的标准库内容,并使用了 std 命名空间。

  2. 自定义函数对象 myPrint

    class myPrint
    {
    public:void operator()(int val){cout << val << " ";}
    };
    

    myPrint 是一个函数对象类,它定义了 operator(),用于打印整数值。这个类在后面的代码中被用来遍历并打印向量的元素。

  3. 测试函数 test01

    void test01()
    {vector<int> v1;vector<int> v2;// 向 v1 和 v2 中添加元素for (int i = 0; i < 10; i++){v1.push_back(i);      // v1 包含 0 到 9v2.push_back(i + 5);  // v2 包含 5 到 14}vector<int> vTarget;// 取两个向量中较小的大小来设置 vTarget 的大小vTarget.resize(min(v1.size(), v2.size()));// 使用 std::set_intersection 计算交集,并将结果存储在 vTarget 中vector<int>::iterator itEnd =set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());// 使用自定义的 myPrint 函数对象打印 vTarget 中的元素for_each(vTarget.begin(), itEnd, myPrint());cout << endl;
    }
    
    • test01 函数首先创建两个向量 v1 和 v2,分别包含了一系列整数。
    • v1 包含了 {0, 1, 2, ..., 9}v2 包含了 {5, 6, 7, ..., 14}
    • vTarget 向量被预先调整大小为 min(v1.size(), v2.size()),以确保足够存储计算得到的交集。
    • set_intersection 函数被调用来计算 v1 和 v2 的交集,结果存储在 vTarget 中。返回值 itEnd 是输出范围的尾后迭代器。
    • for_each 算法结合 myPrint 函数对象,迭代输出 vTarget 中的元素。
  4. 主函数 main

    int main() {test01();system("pause");return 0;
    }
    
    • main 函数调用 test01 来执行测试,并在程序结束时暂停控制台,以便查看输出结果。

总结:这段代码展示了如何使用 std::set_intersection 计算两个向量的交集,并使用自定义函数对象来打印结果。这种方法利用了 C++ 标准库中的算法和容器,展示了如何高效地处理集合操作。


#include <vector>
#include <algorithm>
class myPrint
{
public:void operator()(int val){cout << val << " ";}
};
void test01()
{vector<int> v1;vector<int> v2;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i + 5);}vector<int> vTarget;//取两个里面较小的值给目标容器开辟空间vTarget.resize(min(v1.size(), v2.size()));//返回目标容器的最后一个元素的迭代器地址vector<int>::iterator itEnd =set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, myPrint());cout << endl;
}
int main() {test01();system("pause");return 0;
}

02-常用集合算法之set_union用法

       std::set_union 是另一个 C++ 标准库中的算法,用于计算两个已排序集合的并集。它会将两个输入集合的并集存储在第三个容器中,这个容器必须足够大以容纳所有结果。

以下是 std::set_union 的典型用法和详细解释:

#include <algorithm> // for std::set_union
#include <vector>    // for std::vector
#include <iostream>  // for outputint main() {// 定义两个已排序的输入集合std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {3, 4, 5, 6, 7};// 定义一个输出集合,用于存储并集结果std::vector<int> unionResult(set1.size() + set2.size());// 使用 std::set_union 计算并集,并返回结束迭代器auto itEnd = std::set_union(set1.begin(), set1.end(),set2.begin(), set2.end(),unionResult.begin());// 调整输出集合大小,仅包含有效元素unionResult.resize(itEnd - unionResult.begin());// 输出并集结果for (int num : unionResult) {std::cout << num << ' ';}std::cout << std::endl;return 0;
}

在这段代码中,我们展示了如何使用 std::set_union 算法计算两个已排序向量 set1 和 set2 的并集,并将结果存储在另一个向量 unionResult 中。

std::set_union 的参数解释:

  1. 输入集合的迭代器范围

    • set1.begin() 和 set1.end():定义第一个输入集合 set1 的开始和结束迭代器。
    • set2.begin() 和 set2.end():定义第二个输入集合 set2 的开始和结束迭代器。
  2. 输出集合的目标范围

    • unionResult.begin():指定用于存储结果的输出集合的起始位置迭代器。
  3. 返回值

    • std::set_union 函数返回一个迭代器,指向输出范围的结束位置。这个迭代器可以帮助我们调整输出容器的大小,使其仅包含有效的并集元素。

代码解析:

  • 定义输入集合set1 和 set2 是已排序的向量,分别包含 {1, 2, 3, 4, 5} 和 {3, 4, 5, 6, 7}

  • 定义输出集合unionResult 的大小被设定为 set1.size() + set2.size(),以确保足够大来容纳所有可能的并集元素。

  • 计算并集std::set_union 函数被调用来计算 set1 和 set2 的并集,并将结果存储在 unionResult 中。结束迭代器 itEnd 标志着输出范围的末尾。

  • 调整输出集合大小:通过 unionResult.resize(itEnd - unionResult.begin()),我们调整 unionResult 的大小,使其仅包含实际计算得到的并集元素。

  • 输出结果:最后使用简单的循环输出来展示计算得到的并集。

总结来说,std::set_union 是一个有用的算法,用于合并两个已排序集合,其操作简便高效,适用于各种需要处理集合并集的情况。

下面给出具体代码分析应用过程:

这段代码演示了如何使用 std::set_union 算法来计算两个向量 v1 和 v2 的并集,并将结果存储在目标向量 vTarget 中。

让我们逐步解释这段代码:

  1. 头文件包含和命名空间

    #include <vector>
    #include <algorithm>
    using namespace std;
    

    这些头文件包含了向量 (vector) 和算法 (algorithm) 所需的标准库内容,并使用了 std 命名空间。

  2. 自定义函数对象 myPrint

    class myPrint
    {
    public:void operator()(int val){cout << val << " ";}
    };
    

    myPrint 是一个函数对象类,它定义了 operator(),用于打印整数值。这个类在后面的代码中被用来遍历并打印向量的元素。

  3. 测试函数 test01

    void test01()
    {vector<int> v1;vector<int> v2;// 向 v1 和 v2 中添加元素for (int i = 0; i < 10; i++){v1.push_back(i);      // v1 包含 0 到 9v2.push_back(i + 5);  // v2 包含 5 到 14}vector<int> vTarget;// 取两个容器的和给目标容器开辟空间vTarget.resize(v1.size() + v2.size());// 使用 std::set_union 计算并集,并将结果存储在 vTarget 中vector<int>::iterator itEnd =set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());// 使用自定义的 myPrint 函数对象打印 vTarget 中的元素for_each(vTarget.begin(), itEnd, myPrint());
#include <vector>
#include <algorithm>class myPrint
{
public:void operator()(int val){cout << val << " ";}
};
void test01()
{vector<int> v1;vector<int> v2;for (int i = 0; i < 10; i++) {v1.push_back(i);v2.push_back(i + 5);}vector<int> vTarget;//取两个容器的和给目标容器开辟空间vTarget.resize(v1.size() + v2.size());//返回目标容器的最后一个元素的迭代器地址vector<int>::iterator itEnd =set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, myPrint());cout << endl;
}
int main() {test01();system("pause");return 0;
}

03-常用集合算法之set_difference用法

       std::set_difference 是另一个C++标准库中的算法,用于计算两个已排序集合的差集。它会从第一个输入集合中移除与第二个输入集合相同的元素,并将结果存储在第三个容器中。以下是 std::set_difference 的典型用法和详细解释:

#include <algorithm> // for std::set_difference
#include <vector>    // for std::vector
#include <iostream>  // for outputint main() {// 定义两个已排序的输入集合std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {3, 4, 5, 6, 7};// 定义一个输出集合,用于存储差集结果std::vector<int> differenceResult(set1.size());// 使用 std::set_difference 计算差集,并返回结束迭代器auto itEnd = std::set_difference(set1.begin(), set1.end(),set2.begin(), set2.end(),differenceResult.begin());// 调整输出集合大小,仅包含有效元素differenceResult.resize(itEnd - differenceResult.begin());// 输出差集结果for (int num : differenceResult) {std::cout << num << ' ';}std::cout << std::endl;return 0;
}

std::set_difference 的参数解释:

  1. 输入集合的迭代器范围

    • set1.begin() 和 set1.end():定义第一个输入集合 set1 的开始和结束迭代器。
    • set2.begin() 和 set2.end():定义第二个输入集合 set2 的开始和结束迭代器。
  2. 输出集合的目标范围

    • differenceResult.begin():指定用于存储结果的输出集合的起始位置迭代器。
  3. 返回值

    • std::set_difference 函数返回一个迭代器,指向输出范围的结束位置。这个迭代器可以帮助我们调整输出容器的大小,使其仅包含有效的差集元素。

代码解析:

  • 定义输入集合set1 和 set2 是已排序的向量,分别包含 {1, 2, 3, 4, 5} 和 {3, 4, 5, 6, 7}

  • 定义输出集合differenceResult 的大小被设定为 set1.size(),以确保足够大来容纳所有可能的差集元素。

  • 计算差集std::set_difference 函数被调用来计算 set1 和 set2 的差集,并将结果存储在 differenceResult 中。结束迭代器 itEnd 标志着输出范围的末尾。

  • 调整输出集合大小:通过 differenceResult.resize(itEnd - differenceResult.begin()),我们调整 differenceResult 的大小,使其仅包含实际计算得到的差集元素。

  • 输出结果:最后使用简单的循环输出来展示计算得到的差集。

总结来说,std::set_difference 是一个有用的算法,用于从一个已排序集合中移除另一个集合中存在的元素,其操作简便高效,适用于各种需要处理集合差集的情况。

 下面给出具体代码分析应用过程:

这段代码展示了如何使用 std::set_difference 算法来计算两个已排序向量 v1 和 v2 的差集,并将结果存储在目标向量 vTarget 中。

让我们逐步解释这段代码:

  1. 头文件包含和命名空间

    #include <vector>
    #include <algorithm>
    #include <iostream>  // 这里应该包含头文件以便使用 cout
    using namespace std;
    

    这些头文件包含了向量 (vector) 和算法 (algorithm) 所需的标准库内容,以及输出 (cout) 所需的头文件。

  2. 自定义函数对象 myPrint

    class myPrint
    {
    public:void operator()(int val){cout << val << " ";}
    };
    

    myPrint 是一个函数对象类,用于打印整数值。它在后面的代码中被用来遍历并打印向量的元素。

  3. 测试函数 test01

    void test01()
    {vector<int> v1;vector<int> v2;// 向 v1 和 v2 中添加元素for (int i = 0; i < 10; i++){v1.push_back(i);      // v1 包含 0 到 9v2.push_back(i + 5);  // v2 包含 5 到 14}vector<int> vTarget;// 取两个向量中较大的大小作为目标容器的大小vTarget.resize(max(v1.size(), v2.size()));// 使用 std::set_difference 计算 v1 和 v2 的差集,并将结果存储在 vTarget 中cout << "v1与v2的差集为: " << endl;vector<int>::iterator itEnd =set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());// 使用自定义的 myPrint 函数对象打印 vTarget 中的元素for_each(vTarget.begin(), itEnd, myPrint());cout << endl;// 再次使用 set_difference 计算 v2 和 v1 的差集,并存储在 vTarget 中cout << "v2与v1的差集为: " << endl;itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());// 使用自定义的 myPrint 函数对象打印 vTarget 中的元素for_each(vTarget.begin(), itEnd, myPrint());cout << endl;
    }
    
    • 向量初始化v1 和 v2 分别初始化为 {0, 1, 2, ..., 9} 和 {5, 6, 7, ..., 14}
    • 目标向量初始化vTarget 通过 resize 函数调整为能容纳 v1 和 v2 中最大元素数量的大小。
    • 第一次差集计算:使用 set_difference 计算 v1 和 v2 的差集,并将结果存储在 vTarget 中,通过 for_each 和 myPrint 打印差集元素。
    • 第二次差集计算:再次使用 set_difference 计算 v2 和 v1 的差集,并覆盖 vTarget,再次打印差集元素。
  4. 主函数 main

    int main() {test01();system("pause");return 0;
    }
    
    • 调用 test01 函数来执行测试。
    • 使用 system("pause") 来在控制台中暂停,以便查看输出结果。

这段代码通过 std::set_difference 演示了如何计算两个向量的差集,并通过自定义的函数对象来打印结果。

#include <vector>
#include <algorithm>
class myPrint
{
public:void operator()(int val){cout << val << " ";}
};
void test01()
{vector<int> v1;vector<int> v2;for (int i = 0; i < 10; i++) {v1.push_back(i);v2.push_back(i + 5);}vector<int> vTarget;//取两个里面较大的值给目标容器开辟空间vTarget.resize(max(v1.size(), v2.size()));//返回目标容器的最后一个元素的迭代器地址cout << "v1与v2的差集为: " << endl;vector<int>::iterator itEnd =set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, myPrint());cout << endl;cout << "v2与v1的差集为: " << endl;itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, myPrint());cout << endl;
}
int main() {test01();system("pause");return 0;
}

总结

       

  1. std::set_intersection(求交集):

    • std::set_intersection算法用于计算两个已排序范围的交集,并将结果存储到另一个输出迭代器指定的范围中。
    • 示例用法:
      std::set<int> set1 = {1, 2, 3, 4, 5};
      std::set<int> set2 = {3, 4, 5, 6, 7};
      std::vector<int> intersection;std::set_intersection(set1.begin(), set1.end(),set2.begin(), set2.end(),std::back_inserter(intersection));// intersection 现在包含 {3, 4, 5}
      
  2. std::set_union(求并集):

    • std::set_union算法用于计算两个已排序范围的并集,并将结果存储到另一个输出迭代器指定的范围中。
    • 示例用法:
      std::set<int> set1 = {1, 2, 3, 4, 5};
      std::set<int> set2 = {3, 4, 5, 6, 7};
      std::vector<int> uni;std::set_union(set1.begin(), set1.end(),set2.begin(), set2.end(),std::back_inserter(uni));// uni 现在包含 {1, 2, 3, 4, 5, 6, 7}
      
  3. std::set_difference(求差集):

    • std::set_difference算法用于计算第一个已排序范围中存在但不在第二个已排序范围中的元素,并将结果存储到另一个输出迭代器指定的范围中。
    • 示例用法:
      std::set<int> set1 = {1, 2, 3, 4, 5};
      std::set<int> set2 = {3, 4, 5, 6, 7};
      std::vector<int> difference;std::set_difference(set1.begin(), set1.end(),set2.begin(), set2.end(),std::back_inserter(difference));// difference 现在包含 {1, 2}
      

这些算法要求其输入范围是已排序的。如果输入集合不是已排序的,你需要先对它们进行排序,然后再应用这些算法。

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

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

相关文章

Nginx 负载均衡实现上游服务健康检查

Nginx 负载均衡实现上游服务健康检查 Author&#xff1a;Arsen Date&#xff1a;2024/06/20 目录 Nginx 负载均衡实现上游服务健康检查 前言一、Nginx 部署并新增模块二、健康检查配置2.1 准备 nodeJS 应用程序2.2 Nginx 配置负载均衡健康检查 小结 前言 如果你使用云负载均衡…

深入理解适配器模式:Java实现与框架应用

适配器模式是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。在本篇博客中&#xff0c;我们将详细介绍适配器模式&#xff0c;并演示如何在Java中实现它。最后&#xff0…

python从入门到精通9:字符串简介

Python中的字符串是一种非常常见且重要的数据类型&#xff0c;用于存储一系列字符&#xff08;如文本、数字、标点符号等&#xff09;。Python的字符串处理功能强大且灵活&#xff0c;为开发者提供了丰富的操作方法和工具。下面我们将对Python字符串进行深入的解析。 1. 字符串…

对于大型 Clojure 项目,如何进行有效的代码组织和模块划分以提高可维护性?

在大型 Clojure 项目中&#xff0c;以下是一些有效的代码组织和模块划分的方法&#xff0c;可提高可维护性&#xff1a; 使用命名空间&#xff08;namespace&#xff09;&#xff1a;将相关函数和数据结构组织到逻辑上相关的命名空间中&#xff0c;以便更好地理解和管理代码。按…

【Linux】 yum学习

yum介绍 在Linux系统中&#xff0c;yum&#xff08;Yellowdog Updater, Modified&#xff09;是一个用于管理软件包的命令行工具&#xff0c;特别适用于基于RPM&#xff08;Red Hat Package Manager&#xff09;的系统&#xff0c;如CentOS、Fedora和Red Hat Enterprise Linux…

【Arduino】实验使用ESP32单片机根据光线变化控制LED小灯开关(图文)

今天小飞鱼继续来实验ESP32的开发&#xff0c;这里使用关敏电阻来配合ESP32做一个我们平常接触比较多的根据光线变化开关灯的实验。当白天时有太阳光&#xff0c;则把小灯关闭&#xff1b;当光线不好或者黑天时&#xff0c;自动打开小灯。 int value;void setup() {pinMode(34…

数据分析面试八股文--技能软件类

Excel 数据透视表 数据透视表(Pivot Table)是 Excel 中一个强大的功能&#xff0c;用于快速汇总、排序、重新组织和分析数据集&#xff0c;可以在面试中被要求展示如何创建和使用数据透视表来进行数据分析。 考察点可能包括: 创建数据透视表分类、汇总数据使用数据透视表进…

音视频开发29 FFmpeg 音频编码- 流程以及重要API,该章节使用AAC编码说明

此章节的一些参数&#xff0c;需要先掌握aac的一些基本知识&#xff1a;​​​​​​aac音视频开发13 FFmpeg 音频 --- 常用音频格式AAC&#xff0c;AAC编码器&#xff0c; AAC ADTS格式 。_ffmpeg aac data数据格式-CSDN博客 目的&#xff1a; 从本地⽂件读取PCM数据进⾏AAC格…

cgroups v1简介

cgroup 概念 Cgroup&#xff0c;全称Control Group&#xff08;控制组&#xff09;&#xff0c;是Linux系统内核提供的一个特性&#xff08;Linux 2.6.24内核开始将Cgroup加入主线&#xff09;。 主要作用&#xff1a; 限制和隔离一组进程对系统资源的使用&#xff0c;也就是…

【CARD】多变化字幕的上下文感知差异提炼(ACL 2024)

摘要 Multi-change captioning旨在用自然语言描述图像对中的复杂变化。和图像字幕相比&#xff0c;这个任务要求模型具有更高层次的认知能力来推理任意数量的变化。本文提出一种新的上下文感知差异提取网络&#xff08;CARD&#xff09;。给定一个图像对&#xff0c;CARD首先解…

vm.max_map_count是什么?起到什么作用

vm.max_map_count 是 Linux 内核中的一个参数&#xff0c;它决定了一个进程可以拥有的最大内存映射区域数。内存映射区域是指内存映射文件、匿名内存映射等。这个参数对于一些应用程序&#xff08;如 Elasticsearch&#xff09;特别重要&#xff0c;因为它们在运行时会创建大量…

socket通讯可以直接传地址吗?【面试】

在网络编程中&#xff0c;socket 通信不直接传输内存地址。这是因为网络通信是在不同的内存空间和可能不同的计算机之间进行的&#xff0c;内存地址在不同的进程和机器上没有意义。相反&#xff0c;socket 通信使用套接字&#xff08;socket&#xff09;&#xff1a; IP地址&a…

深入浅出Java的函数式编程

深入浅出Java的函数式编程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨Java中的函数式编程&#xff0c;这是一种强大的编程范式&#xff0c;它…

用 Terraform 初始化 GCP环境

前置准备 安装 Terraform 请参考 Terraform 官方文件 安装 Terraform。MacOS 可以使用 Homebrew 安装&#xff1a; brew install terraform 安装 Google Cloud SDK 请参考 Google Cloud SDK 官方文件 安装 Google Cloud SDK。MacOS 可以使用 Homebrew 安装&#xff1a; b…

Multigranularity and MultiscaleProgressive Contrastive Learning

这篇文章将一张图片划分为四个不同细粒度大小的图片&#xff0c;然后输出四个神经网络&#xff0c;这四个神经网络共享权重&#xff0c;得到四个输出&#xff0c;将这四个输出求交叉熵损失和对比学习损失&#xff0c;共同监督模型学习。 通过对比学习&#xff0c;最大化一个Bat…

Microsoft Edge无法启动搜索问题的解决

今天本来想清一下电脑&#xff0c;看到visual studio2022没怎么用了就打算卸载掉。然后看到网上有篇文章说进入C盘的ProgramFiles&#xff08;x86&#xff09;目录下的microsoft目录下的microsoft visual studio目录下的install目录中&#xff0c;双击InstallCleanup.exe&#…

谷歌浏览器与谷歌驱动匹配

网址&#xff1a;Chrome for Testing availability (googlechromelabs.github.io)

中医诊所处方药材管理系统有哪些必备功能?

随着信息技术的飞速发展&#xff0c;传统中医行业也迎来了数字化转型的浪潮。欣九康诊疗系统&#xff0c;具有全面的功能&#xff0c;可以作为一款合适中医诊所处方药材管理系统来使用。那么&#xff0c;中医诊所使用欣九康&#xff0c;有哪些独特的功能和优势呢?能否为中医诊…

Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人脸 c++

Windows环境中配置OpenCV 关于在Windows环境中配置opencv的说明&#xff0c;具体可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程。 CascadeClassifier 分类器 CascadeClassifier 是 OpenCV 库中的一个类&#xff0c;它用于实现一种快速的物体检测算法&#xff0c;称…

API接口技术开发分享;按关键字搜索淘宝、天猫商品API返回值接入说明

淘宝数据API的接入流程主要包括注册key账号、创建开发者应用、获取ApiKey和ApiSecret、申请API权限等步骤。淘通过这些接口可以获取商品、订单、用户、营销和物流管理等多方面的数据。以下是关于淘宝数据API接入流程的相关介绍&#xff1a; 注册key账号&#xff1a;进行账号注册…