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 


目录
相关文章
|
1月前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
21 1
|
1月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
61 6
|
1月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
55 7
|
1月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
1月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
27 0
|
1月前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
28 0
|
1月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
1月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
22 0
|
1月前
|
C++
C++番外篇——vector的实现
C++番外篇——vector的实现
46 0
|
1月前
|
存储 C++ 容器
C++入门8——vector的使用
C++入门8——vector的使用
66 0