• c++常用拷贝和替换算法 安静点


    算法简介:

    • copy // 容器内指定范围的元素拷贝到另一容器中
    • replace // 将容器内指定范围的旧元素修改为新元素
    • replace_if // 容器内指定范围满足条件的元素替换为新元素
    • swap // 互换两个容器的元素

     1 copy

    功能描述:

    • 容器内指定范围的元素拷贝到另一容器中

    函数原型:

    • copy(iterator beg, iterator end, iterator dest);

      // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置

      // beg 开始迭代器

      // end 结束迭代器

      // dest 目标起始迭代器

    示例:

    #include <algorithm>
    #include <vector>
    
    class myPrint
    {
    public:
        void operator()(int val)
        {
            cout << val << " ";
        }
    };
    
    void test01()
    {
        vector<int> v1;
        for (int i = 0; i < 10; i++) {
            v1.push_back(i + 1);
        }
        vector<int> v2;
        v2.resize(v1.size());
        copy(v1.begin(), v1.end(), v2.begin());
    
        for_each(v2.begin(), v2.end(), myPrint());
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    **总结:**利用copy算法在拷贝时,目标容器记得提前开辟空间

    2 replace

    功能描述:

    • 将容器内指定范围的旧元素修改为新元素

    函数原型:

    • replace(iterator beg, iterator end, oldvalue, newvalue);

      // 将区间内旧元素 替换成 新元素

      // beg 开始迭代器

      // end 结束迭代器

      // oldvalue 旧元素

      // newvalue 新元素

    示例:

    #include <algorithm>
    #include <vector>
    
    class myPrint
    {
    public:
        void operator()(int val)
        {
            cout << val << " ";
        }
    };
    
    void test01()
    {
        vector<int> v;
        v.push_back(20);
        v.push_back(30);
        v.push_back(20);
        v.push_back(40);
        v.push_back(50);
        v.push_back(10);
        v.push_back(20);
    
        cout << "替换前:" << endl;
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    
        //将容器中的20 替换成 2000
        cout << "替换后:" << endl;
        replace(v.begin(), v.end(), 20,2000);
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    **总结:**replace会替换区间内满足条件的元素

    3 replace_if

    功能描述:

    • 将区间内满足条件的元素,替换成指定元素

    函数原型:

    • replace_if(iterator beg, iterator end, _pred, newvalue);

      // 按条件替换元素,满足条件的替换成指定元素

      // beg 开始迭代器

      // end 结束迭代器

      // _pred 谓词

      // newvalue 替换的新元素

    示例:

    #include <algorithm>
    #include <vector>
    
    class myPrint
    {
    public:
        void operator()(int val)
        {
            cout << val << " ";
        }
    };
    
    class ReplaceGreater30
    {
    public:
        bool operator()(int val)
        {
            return val >= 30;
        }
    
    };
    
    void test01()
    {
        vector<int> v;
        v.push_back(20);
        v.push_back(30);
        v.push_back(20);
        v.push_back(40);
        v.push_back(50);
        v.push_back(10);
        v.push_back(20);
    
        cout << "替换前:" << endl;
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    
        //将容器中大于等于的30 替换成 3000
        cout << "替换后:" << endl;
        replace_if(v.begin(), v.end(), ReplaceGreater30(), 3000);
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    4 swap

    功能描述:

    • 互换两个容器的元素

    函数原型:

    • swap(container c1, container c2);

      // 互换两个容器的元素

      // c1容器1

      // c2容器2

    示例:

    #include <algorithm>
    #include <vector>
    
    class myPrint
    {
    public:
        void operator()(int val)
        {
            cout << val << " ";
        }
    };
    
    void test01()
    {
        vector<int> v1;
        vector<int> v2;
        for (int i = 0; i < 10; i++) {
            v1.push_back(i);
            v2.push_back(i+100);
        }
    
        cout << "交换前: " << endl;
        for_each(v1.begin(), v1.end(), myPrint());
        cout << endl;
        for_each(v2.begin(), v2.end(), myPrint());
        cout << endl;
    
        cout << "交换后: " << endl;
        swap(v1, v2);
        for_each(v1.begin(), v1.end(), myPrint());
        cout << endl;
        for_each(v2.begin(), v2.end(), myPrint());
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    **总结:**swap交换容器时,注意交换的容器要同种类型

  • 相关阅读:
    用一条UPDATE语句交换两列的值
    js之事件冒泡和事件捕获详细介绍
    C# String与string的区别
    setTimeout()和setInterval()方法的区别?
    jQuery的.bind()、.live()和.delegate()之间区别
    在Hyper-V虚拟机中使用Wi-Fi上网
    调整框架的尺寸,是否显示滚动条,跳出框架
    调整框架的尺寸
    查看jquery绑定的事件函数
    Onload,Onunload,onbeforeunload,$(window).load(function() {})和$(document).ready(function(){})
  • 原文地址:https://www.cnblogs.com/anjingdian/p/16389053.html
Copyright © 2020-2023  润新知