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++】vector介绍+模拟实现
【C++】vector介绍+模拟实现
|
3月前
|
C++ 容器
C++中向量的操作vector
C++中向量的操作vector
|
2月前
|
算法 编译器 Linux
【C++】vector的模拟实现
【C++】vector的模拟实现
|
2月前
|
存储 算法 C语言
【C++】vector的认识与使用
【C++】vector的认识与使用
|
2月前
|
存储 算法 C++
【C++】vector介绍以及模拟实现(超级详细)
【C++】vector介绍以及模拟实现(超级详细)
47 4
|
2月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
60 0
|
3月前
|
存储 C语言 C++
【C++】vector的使用上
**C++ STL的vector简介与用法:** Vector是动态顺序数组,提供高效下标访问,支持动态增长。与数组类似但可自动调整大小。常用构造函数包括默认、填充、迭代器范围和拷贝构造。析构函数自动释放内存。赋值运算符执行深拷贝。迭代器接口包括`begin()`和`end()`(反向对应`rbegin()`和`rend()`),C++11增加了const版本以支持只读访问。示例代码展示了不同构造函数和迭代器的使用。
|
3月前
|
存储 Java C++
【c++】vector模拟
【c++】vector模拟
22 0
|
3月前
|
编译器 C++
【C++】vector的使用下
**C++ 中的 `std::vector` 概要:** - **元素获取:** 支持 `operator[]`(越界时不检
|
3月前
|
存储 安全 C++