The STL (common sort, copy, replacement algorithm)

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/qq_42754132/article/details/100063956

4.5 common sorting algorithm

/*

    merge algorithm container element combined and stored in another container,

    @param beg1 container 1 start iterator

    @param end1 container 1 end iterator

    @param beg2 container 2 start iterator

    @param end2 container 2 end iterator

    @param dest  target vessel began iterator

*/

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

/*

    sort algorithm to sort the container elements

    Note: two containers must be ordered

    @param beg container 1 start iterator

    @param end container 1 end iterator

    @param _callback callback predicate or (bool return type of the function object)

*/

sort(iterator beg, iterator end, _callback)

/*

    sort algorithm for the elements in a specified range adjusted random sequence

    @param beg vessel began iterator

    @param end container end iterator

*/

random_shuffle(iterator beg, iterator end)

/*

    reverse inversion algorithm specified range of elements

    @param beg vessel began iterator

    @param end container end iterator

*/

reverse(iterator beg, iterator end)


17 common sorting algorithm
   merge algorithm container elements are combined and stored in another container, two containers to order, and the order of the same
   sort commonly used sorting algorithm which is the focus
   random_shuffle shuffling algorithm need to provide their own random number seed, this is also very important
   reverse reverse is not the sort

 

#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 and used replacement algorithm

/*

    copy algorithm element within the container specified range are copied to another vessel

    @param beg vessel began iterator

    @param end container end iterator

    @param dest target starting iterator

*/

copy(iterator beg, iterator end, iterator dest)

/*

    replace algorithm in the container specified range of elements to modify the old for the new element

    @param beg vessel began iterator

    @param end container end iterator

    @param oldvalue old elements

    @param oldvalue new element

*/

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;
}

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

Guess you like

Origin blog.csdn.net/qq_42754132/article/details/100063956