2023-4-6-C++Vector求交集并集和差集(去除冗余数)

简介: 2023-4-6-C++Vector求交集并集和差集(去除冗余数)
/// <summary>
        /// 两个vector求交集
        /// </summary>
        /// <returns></returns>
    public:
        template<typename T>
        static auto
        VectorIntersection(const std::vector<T> &firstVector, const std::vector<T> &secondVector) -> std::vector<T> {
            std::vector<T> IntersectResult;
            IntersectResult.resize(min(firstVector.size(), secondVector.size()));
            typename std::vector<T>::iterator end = std::set_intersection(firstVector.begin(), firstVector.end(),
                                                                          secondVector.begin(), secondVector.end(),
                                                                          IntersectResult.begin());
            IntersectResult.erase(end, IntersectResult.end());
            return IntersectResult;
        }
        /// <summary>
        /// 两个vector求并集
        /// </summary>
        /// <returns></returns>
    public:
        template<typename T>
        static auto
        VectorUnion(const std::vector<T> &firstVector, const std::vector<T> &secondVector) -> std::vector<T> {
            std::vector<T> UnionResult{};
            UnionResult.resize(firstVector.size() + secondVector.size());
            typename std::vector<T>::iterator end = std::set_union(firstVector.begin(), firstVector.end(),
                                                                   secondVector.begin(), secondVector.end(),
                                                                   UnionResult.begin());
            UnionResult.erase(end, UnionResult.end());
            return UnionResult;
        }
        /// <summary>
        /// 两个vector求差集
        /// </summary>
        /// <returns></returns>
    public:
        template<typename T>
        static auto
        VectorDifference(const std::vector<T> &firstVector, const std::vector<T> &secondVector) -> std::vector<T> {
            std::vector<T> DifferenceResult{};
            DifferenceResult.resize(firstVector.size());
            typename std::vector<T>::iterator end = std::set_difference(firstVector.begin(), firstVector.end(),
                                                                        secondVector.begin(), secondVector.end(),
                                                                        DifferenceResult.begin());
            DifferenceResult.erase(end, DifferenceResult.end());
            return DifferenceResult;
        }

🤨测试

[[noreturn]]
int main(int argc, char **argv) {
    std::vector<int> v1 = {1, 2, 3, 4};
    std::vector<int> v2 = {2, 3, 4, 5};
    auto v3 = BasicMath::VectorIntersection(v1, v2);
    std::cout << "求交集结果:";
    std::for_each(v3.begin(), v3.end(), [](const int &item) {
        std::cout << item << " ";
    });
    std::cout << std::endl;
    v3 = BasicMath::VectorUnion(v1, v2);
    std::cout << "求并集结果:";
    std::for_each(v3.begin(), v3.end(), [](const int &item) {
        std::cout << item << " ";
    });
    std::cout << std::endl;
    v3 = BasicMath::VectorDifference(v1, v2);
    std::cout << "求差集结果v1-v2:";
    std::for_each(v3.begin(), v3.end(), [](const int &item) {
        std::cout << item << " ";
    });
    std::cout << std::endl;
    v3 = BasicMath::VectorDifference(v2, v1);
    std::cout << "求差集结果v2-v1:";
    std::for_each(v3.begin(), v3.end(), [](const int &item) {
        std::cout << item << " ";
    });
    std::cout << std::endl;
}

😋结果

求交集结果:2 3 4 
求并集结果:1 2 3 4 5 
求差集结果v1-v2:1 
求差集结果v2-v1:5 


目录
相关文章
|
2月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
66 4
|
17天前
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
39 0
|
21天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
30 0
|
3月前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
27 1
|
3月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
3月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
38 0
|
3月前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
35 0
|
3月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
3月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
28 0
|
3月前
|
C++
C++番外篇——vector的实现
C++番外篇——vector的实现
50 0