STL(常用排序,拷贝,替换算法)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42754132/article/details/100063956

4.5 常用排序算法

/*

    merge算法 容器元素合并,并存储到另一容器中

    @param beg1 容器1开始迭代器

    @param end1 容器1结束迭代器

    @param beg2 容器2开始迭代器

    @param end2 容器2结束迭代器

    @param dest  目标容器开始迭代器

*/

merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)

/*

    sort算法 容器元素排序

    注意:两个容器必须是有序的

    @param beg 容器1开始迭代器

    @param end 容器1结束迭代器

    @param _callback 回调函数或者谓词(返回bool类型的函数对象)

*/

sort(iterator beg, iterator end, _callback)

/*

    sort算法 对指定范围内的元素随机调整次序

    @param beg 容器开始迭代器

    @param end 容器结束迭代器

*/

random_shuffle(iterator beg, iterator end)

/*

    reverse算法 反转指定范围的元素

    @param beg 容器开始迭代器

    @param end 容器结束迭代器

*/

reverse(iterator beg, iterator end)


17 常用排序算法
   merge 算法 容器元素合并,并存储到另一个容器中,两容器要有序,并且顺序一致
   sort 排序算法比较常用 这是重点
   random_shuffle 洗牌算法 自己需要提供随机数种子,这个也很重要
   reverse 反转 并不是排序

#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <ctime>
using namespace std;

/*
    merge算法 容器元素合并,并存储到另一容器中,这两个容器必须有序且顺序相同
    @param beg1 容器1开始迭代器
    @param end1 容器1结束迭代器
    @param beg2 容器2开始迭代器
    @param end2 容器2结束迭代器
    @param dest  目标容器开始迭代器
*/
//merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)


void test01(){
    vector<int>v1;
    vector<int>v2;
    for(int i=0;i<10;i++){
        v1.push_back(i);
        v2.push_back(i+1);
    }

    vector<int> vTarget;
    //开辟控件
    vTarget.resize(v1.size()+v2.size());

    merge(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());

    for_each(vTarget.begin(),vTarget.end(),[](int v){cout<<v<<endl;});

}

/*
    sort算法 容器元素排序
    注意:两个容器必须是有序的
    @param beg 容器1开始迭代器
    @param end 容器1结束迭代器
    @param _callback 回调函数或者谓词(返回bool类型的函数对象)
*/
//sort(iterator beg, iterator end, _callback)

bool myCom(int v1,int v2){
    return v1>v2;
}

void test02(){
    vector<int>v1;
    v1.push_back(10);
    v1.push_back(3);
    v1.push_back(34);
    v1.push_back(23);

    sort(v1.begin(),v1.end());
    for_each(v1.begin(),v1.end(),[](int v){cout<<v<<endl;});

    cout<<"---------------------------"<<endl;
   sort(v1.begin(),v1.end(),greater<int>());
    // sort(v1.begin(),v1.end(),myCom);
  // sort(v1.begin(),v1.end(),[](int v1,int v2){return v1>v2;});
    for_each(v1.begin(),v1.end(),[](int v){cout<<v<<endl;});

}


/*
    sort算法 对指定范围内的元素随机调整次序
    @param beg 容器开始迭代器
    @param end 容器结束迭代器
*/

//random_shuffle(iterator beg, iterator end)//洗牌算法




void test03(){
    vector<int>v;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }

    random_shuffle(v.begin(),v.end());
    for_each(v.begin(),v.end(),[](int v){cout<<v<<endl;});
   //随机算法
    //加随机种子
   //比较实用

}


/*
    reverse算法 反转指定范围的元素
    @param beg 容器开始迭代器
    @param end 容器结束迭代器
*/
//reverse(iterator beg, iterator end)
void test04(){
    vector<int>v;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
    reverse(v.begin(),v.end());
    for_each(v.begin(),v.end(),[](int v){cout<<v<<endl;});

}


int main(){
srand((unsigned int)time(NULL));
    //test01();
    //test02();
//test03();
test04();
system("pause");
    return 0;
}

 

 

4.6 常用拷贝和替换算法

/*

    copy算法 将容器内指定范围的元素拷贝到另一容器中

    @param beg 容器开始迭代器

    @param end 容器结束迭代器

    @param dest 目标起始迭代器

*/

copy(iterator beg, iterator end, iterator dest)

/*

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

    @param beg 容器开始迭代器

    @param end 容器结束迭代器

    @param oldvalue 旧元素

    @param oldvalue 新元素

*/

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

/*

    replace_if算法 将容器内指定范围满足条件的元素替换为新元素

    @param beg 容器开始迭代器

    @param end 容器结束迭代器

    @param callback函数回调或者谓词(返回Bool类型的函数对象)

    @param oldvalue 新元素

*/

replace_if(iterator beg, iterator end, _callback, newvalue)

/*

    swap算法 互换两个容器的元素

    @param c1容器1

    @param c2容器2

*/

swap(container c1, container c2)

  
18 常用的拷贝和替换算法
   copy 复制
   replace  replace_if 替换  比较常用
   swap  交换

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>//流迭代器
using namespace std;

/*
    copy算法 将容器内指定范围的元素拷贝到另一容器中
    @param beg 容器开始迭代器
    @param end 容器结束迭代器
    @param dest 目标起始迭代器
*/
//copy(iterator beg, iterator end, iterator dest)

void test01(){
    vector<int>v;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }

    vector<int>vTarget;
    vTarget.resize(v.size());
    copy(v.begin(),v.end(),vTarget.begin());
    for_each(vTarget.begin(),vTarget.end(),[](int val){cout<<val<<endl;});

    //高端操作
    copy(vTarget.begin(),vTarget.end(),ostream_iterator<int>(cout," "));//流迭代器
}
/*
    replace算法 将容器内指定范围的旧元素修改为新元素
    @param beg 容器开始迭代器
    @param end 容器结束迭代器
    @param oldvalue 旧元素
    @param oldvalue 新元素
*/
//replace(iterator beg, iterator end, oldvalue, newvalue)
/*
    replace_if算法 将容器内指定范围满足条件的元素替换为新元素
    @param beg 容器开始迭代器
    @param end 容器结束迭代器
    @param callback函数回调或者谓词(返回Bool类型的函数对象)
    @param oldvalue 新元素
*/
//replace_if(iterator beg, iterator end, _callback, newvalue)
class myCom{
public:
    bool operator()(int v){
        return v>3;//将大于3的数替换成一个什么样的数
    }
};


void test02(){
    vector<int>v;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
    //需求:把容器中的3替换成300
    replace(v.begin(),v.end(),3,300);

    copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));//流迭代器
    //需求 : 把容器中所有大于3的数字 都替换成300
    replace_if(v.begin(),v.end(),myCom(),3000);
   cout<<endl;
    copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));//流迭代器

}

/*
    swap算法 互换两个容器的元素
    @param c1容器1
    @param c2容器2
*/
//swap(container c1, container c2)

void test03(){
    vector<int>v1;
    for(int i=0;i<10;i++){
        v1.push_back(i);
    }
    vector<int>v2;
    v2.push_back(10);
    v2.push_back(20);
    v2.push_back(20);
    v2.push_back(40);

 cout<<"交换前数据"<<endl;
 copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,"  "));
  cout<<endl;
 copy(v2.begin(),v2.end(),ostream_iterator<int>(cout,"  "));
  cout<<endl;
 swap(v1,v2);

 cout<<"交换后数据"<<endl;
 copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,"  "));
  cout<<endl;
 copy(v2.begin(),v2.end(),ostream_iterator<int>(cout,"  "));
  cout<<endl;
 swap(v1,v2);
}



int main(){

    //test01();
   // test02();
    test03();
    return 0;
}

(本笔记内容整理自网络资源,侵删)

猜你喜欢

转载自blog.csdn.net/qq_42754132/article/details/100063956