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 


目录
相关文章
|
5天前
|
存储 C语言 C++
【C++】vector的使用上
**C++ STL的vector简介与用法:** Vector是动态顺序数组,提供高效下标访问,支持动态增长。与数组类似但可自动调整大小。常用构造函数包括默认、填充、迭代器范围和拷贝构造。析构函数自动释放内存。赋值运算符执行深拷贝。迭代器接口包括`begin()`和`end()`(反向对应`rbegin()`和`rend()`),C++11增加了const版本以支持只读访问。示例代码展示了不同构造函数和迭代器的使用。
|
12天前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
11 1
|
14天前
|
存储 算法 C++
【C++/STL】:vector容器的基本使用
【C++/STL】:vector容器的基本使用
16 1
|
5天前
|
编译器 C++
【C++】vector的使用下
**C++ 中的 `std::vector` 概要:** - **元素获取:** 支持 `operator[]`(越界时不检
|
5天前
|
存储 安全 C++
|
7天前
|
存储 算法 C++
【C++】详解STL容器之一的 vector
【C++】详解STL容器之一的 vector
|
12天前
|
C++ 容器
【c++】优先级队列|反向迭代器(vector|list)
【c++】优先级队列|反向迭代器(vector|list)
7 0
|
12天前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
26 0
|
13天前
|
存储 算法 编译器
【C++航海王:追寻罗杰的编程之路】vector
【C++航海王:追寻罗杰的编程之路】vector
12 0
|
14天前
|
算法 编译器 Linux
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
14 0