zoukankan      html  css  js  c++  java
  • 从数组中删除奇数元素

    #include <iostream>
    #include <cstdint>
    #include <vector>
    
    // 要求:从很大的数组中删除删除某些特定的元素
    // 思路:由于是数组,不要尝试直接删除,否则会导致大量内存拷贝,最好的方法就是元素交换
    
    // 从很大的数组中删除奇数元素
    void remove_cardinal(std::vector<int32_t> & vec)
    {
        std::vector<int32_t>::size_type i = 0, j = vec.size() - 1;
        while(i < j)
        {
            while(i < j && vec[i] % 2 == 0)++i;
            while(i < j && vec[j] % 2 == 1)--j;
            std::swap(vec[i], vec[j]);
        }
        vec.resize(i);
    }
    
    // 从很大的数组中删除奇数元素,但是要保持偶数元素的原有顺序
    void remove_cardinal_stable(std::vector<int32_t> & vec)
    {
        std::vector<int32_t>::size_type i = 0, j = 0;
        while(i < vec.size() && j < vec.size())
        {
            while(i < vec.size() && vec[i] % 2 == 0)++i;
            j = i + 1;
            while(j < vec.size() && vec[j] % 2 == 1)++j;
            if(j < vec.size())
            {
                std::swap(vec[i], vec[j]);
            }
        }
        vec.resize(i);
    }
    
    int32_t main()
    {
        {
            std::vector<int32_t> vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            remove_cardinal(vec);
            for(int32_t & v : vec)
            {
                std::cout << v << " ";
            }
            std::cout << std::endl;
        }
        {
            std::vector<int32_t> vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            remove_cardinal_stable(vec);
            for(int32_t & v : vec)
            {
                std::cout << v << " ";
            }
            std::cout << std::endl;
        }
        return 0;
    }

    输出结果:

    10 2 8 4 6
    2 4 6 8 10
  • 相关阅读:
    php之异常处理
    php7之严格模式RFC
    获取真实ip三个方法
    php网站速度性能优化(转)
    PHPweb应用攻击总结(转)
    PHP安全之Web攻击(转)
    php获取真实ip地址(转)
    单表查询
    表与表之间的关系
    表的操作
  • 原文地址:https://www.cnblogs.com/tangxin-blog/p/8831931.html
Copyright © 2011-2022 走看看