📅  最后修改于: 2023-12-03 14:50:41.653000             🧑  作者: Mango
在 C++ 中,我们经常需要对向量进行各种操作,包括求交集。本文将介绍如何找到两个向量之间的交集,并提供一个详细的示例代码。
要找到两个向量之间的交集,我们可以使用 STL(Standard Template Library)中的 set_intersection
算法。这个算法需要两个有序的输入范围,并输出它们的交集到另一个输出范围。
在 C++ 中,我们可以使用 std::vector
来表示向量,并使用迭代器来定义输入输出范围。
以下是求取两个向量交集的一般步骤:
std::set_intersection
算法,将两个有序向量的交集写入到输出向量中。接下来,我们将通过一个示例程序来演示如何求取两个向量的交集。
#include <iostream>
#include <vector>
#include <algorithm>
template <typename T>
std::vector<T> intersect(const std::vector<T>& vec1, const std::vector<T>& vec2) {
// 创建输出向量
std::vector<T> result;
// 确保输入向量有序
std::vector<T> sortedVec1 = vec1;
std::vector<T> sortedVec2 = vec2;
std::sort(sortedVec1.begin(), sortedVec1.end());
std::sort(sortedVec2.begin(), sortedVec2.end());
// 使用 set_intersection 寻找交集
std::set_intersection(sortedVec1.begin(), sortedVec1.end(), sortedVec2.begin(), sortedVec2.end(), std::back_inserter(result));
return result;
}
int main() {
std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2 = {3, 4, 5, 6, 7};
std::vector<int> intersectVec = intersect(vec1, vec2);
std::cout << "交集:";
for (const auto& num : intersectVec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在上述示例中,我们定义了一个 intersect
函数,该函数使用 set_intersection
算法来找到两个向量的交集。然后在 main
函数中创建两个向量 vec1
和 vec2
,并调用 intersect
函数求取它们的交集。
输出结果为:
交集:3 4 5
通过使用 std::set_intersection
算法,我们可以方便地在 C++ 中找到两个向量之间的交集。在使用这个算法之前,确保输入向量是有序的,以确保获得正确的交集结果。以上示例代码可以作为参考,帮助你在实际项目中实现向量交集的功能。