【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 配置负载均衡健康检查 小结 前言 如果你使用云负载均衡…

【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…

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

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

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

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

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&#…

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;进行账号注册…

JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码

JAVA医院绩效考核系统源码 功能特点&#xff1a;大型医院绩效考核系统源码 医院绩效管理系统主要用于对科室和岗位的工作量、工作质量、服务质量进行全面考核&#xff0c;并对科室绩效工资和岗位绩效工资进行核算的系统。医院绩效管理系统开发主要用到的管理工具有RBRVS、DRGS…

AUCell和AddModuleScore函数进行基因集评分

AUCell 和AddModuleScore 分析是两种主流的用于单细胞RNA测序数据的基因集活性分析的方法。这些基因集可以来自文献、数据库或者根据具体研究问题进行自行定义。 AUCell分析原理&#xff1a; 1、AUCell分析可以将细胞中的所有基因按表达量进行排序&#xff0c;生成一个基因排…

Unity核心

回顾 Unity核心学习的主要内容 项目展示 基础知识 认识模型制作流程 2D相关 图片导入设置相关 图片导入概述 参数设置——纹理类型 参数设置——纹理形状 参数设置——高级设置 参数设置——平铺拉伸 参数设置——平台设置&#xff08;非常重要&#xff09; Sprite Sprite Edit…

【Apache Doris】周FAQ集锦:第 7 期

【Apache Doris】周FAQ集锦&#xff1a;第 7 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

软件测试质量度量之 “三级指标体系”

管理学大师彼得 - 德鲁克曾说过&#xff1a;无数据不管理。 数字是人们快速认知事物的一种有效方式。无论在生活还是工作&#xff0c;对事还是对人都息息相关。碰上难以的用数字描述事物或现象肯定是没有找对适用的指标和度量方式。尤其对于质量工程方面的工作&#xff0c;定量…

喂饭教程:AI生成100套Word题库阿里云百炼实训营

郭震原创&#xff0c;手撸码字187022张图 你好&#xff0c;我是郭震 1 实际需求 前段时间&#xff0c;有个关注我的粉丝联系我&#xff0c;是一位大学计算机女老师。 她想做一个二级考试题库&#xff0c;选择题实操题&#xff0c;最好100套以上&#xff0c;拿来给学生练手。 问…

解两道四年级奥数题(等差数列)玩玩

1、1&#xff5e;200这200个连续自然数的全部数字之和是________。 2、2&#xff0c;4&#xff0c;6&#xff0c;……&#xff0c;2008这些偶数的所有各位数字之和是________。 这两道题算易错吧&#xff0c;这里求数字之和&#xff0c;比如124这个数的全部数字之和是1247。 …

【ClickHouse】副本、分片集群 (六)

副本 副本的目的主要是保障数据的高可用性&#xff0c;即使一台ClickHouse节点宕机&#xff0c;那么也可以从其他服务器获得相同的数据。 https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ 副本写入流程 写入流程如图-18所示: 图-18 写…

CATIA_DELMIA_V5R2019安装包下载及安装教程破解

以下为V5-6R2019安装说明 1.将两卷安装文件解压到同一目录内&#xff0c;互相覆盖即可 &#xff08;按用户需要下载 CATIA 或者DELMIA&#xff09; 以上为 CATIA 的安装包 以上为 DELMIA 的安装包 两者合并到一起&#xff0c;同一目录 2.解压后运行setup.exe 如遇到报错&…

数据集标注研究

主要研究数据集标注存储文件的数据存储格式 目录 0.简介1.coco128-seg数据格式1.1 分割标注格式2.YOLO格式2.1 YOLO目标识别标签2.2 yolov5-seg分割标签2.TT100K数据集标注2.1 TT100K数据集标注文件解析0.简介 1.coco128-seg数据格式 1.1 分割标注格式 如coco128-seg数据集 …

【一步一步了解Java系列】:认识异常类

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff1a;小闭…