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
  • 相关阅读:
    iframeUpload
    获取当前文件路径。
    ie6 overflow 失效
    ie8 vml不显示
    json转换
    nodejs for windows
    模块化管理组件(2012/05/09)
    模块化管理组件v0.1
    Firefox和IE之间7个JavaScript的差异
    c输入函数细节
  • 原文地址:https://www.cnblogs.com/tangxin-blog/p/8831931.html
Copyright © 2011-2022 走看看