C++ 算法包(STL)函数(sort random_shuffle replace copy for_each count_if find_if)

//算法包函数
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>

using namespace std;

class __f {
public:
    void operator()(string str) {
        cout << str.c_str() << endl;
    }
};

class __unary_op {
public:
    string operator()(string str) {
        return str + "MoMo";
    }
};

class __pred {
public:
    string value;

    __pred(string value) : value(value) {}

    bool operator()(const string value_in) {
        return value_in == value;
    }

};

int main() {

    vector<string> vectorVar;

    vectorVar.insert(vectorVar.begin(), "1111");
    vectorVar.insert(vectorVar.begin(), "2222");
    vectorVar.insert(vectorVar.begin(), "3333");
    vectorVar.insert(vectorVar.begin(), "4444");
    vectorVar.insert(vectorVar.begin(), "5555");
    //for_each 遍历
    for_each(vectorVar.begin(), vectorVar.end(), __f());
    cout << "*****************************分割线***************************" << endl;
    //transform
    transform(vectorVar.begin(), vectorVar.end(), vectorVar.begin(), __unary_op());
    for_each(vectorVar.begin(), vectorVar.end(), __f());
    //transform2
    vector<string> vectorResult;
    vectorResult.resize(vectorVar.size());
    transform(vectorVar.begin(), vectorVar.end(), vectorResult.begin(), __unary_op());
    for (vector<string>::iterator itResult = vectorResult.begin(); itResult != vectorResult.end(); itResult++) {
        cout << *itResult << endl;
    }
    //find
    auto iteratorVar = find(vectorResult.begin(), vectorResult.end(), "3333MoMoMoMo");
    if (iteratorVar != vectorResult.end()) {
        cout << "查找到了" << endl;
    } else {
        cout << "没有找到" << endl;
    }
    //find_if
    iteratorVar = find_if(vectorResult.begin(), vectorResult.end(), __pred("2222MoMoMoMo"));
    if (iteratorVar != vectorResult.end()) {
        cout << "查找到了" << endl;
    } else {
        cout << "没有找到" << endl;
    }
    cout << "*****************************分割线***************************" << endl;
    //count_if
    vector<int> vectorVar1;
    vectorVar1.insert(vectorVar1.begin(), 1);
    vectorVar1.insert(vectorVar1.begin(), 2);
    vectorVar1.insert(vectorVar1.begin(), 3);
    vectorVar1.insert(vectorVar1.begin(), 3);
    vectorVar1.insert(vectorVar1.begin(), 2);
    vectorVar1.insert(vectorVar1.begin(), 1);
    vectorVar1.insert(vectorVar1.begin(), 2);
    vectorVar1.insert(vectorVar1.begin(), 2);

    int number_count = 0;
    number_count = count(vectorVar1.begin(), vectorVar1.end(), 2);
    cout << number_count << endl;

    number_count = count_if(vectorVar1.begin(), vectorVar1.end(), bind2nd(less<int>(), 1));
    cout << "less " << number_count << endl;
    number_count = count_if(vectorVar1.begin(), vectorVar1.end(), bind2nd(greater<int>(), 1));
    cout << "greater " << number_count << endl;
    number_count = count_if(vectorVar1.begin(), vectorVar1.end(), bind2nd(equal_to<int>(), 3));
    cout << number_count << endl;
    cout << "equal_to " << number_count << endl;
    //打印:
    //    4
    //    less 0
    //    greater 6
    //    2
    //    equal_to 2
    cout << "*****************************分割线***************************" << endl;
    //merge 容器合并
    vector<int> vectorVar2;
    vectorVar2.push_back(10);
    vectorVar2.push_back(20);
    vectorVar2.push_back(30);
    vectorVar2.push_back(40);

    vector<int> vectorVar3;
    vectorVar3.push_back(50);
    vectorVar3.push_back(60);
    vectorVar3.push_back(70);
    vectorVar3.push_back(80);

    //申请新的容器,并重定义容器大小
    vector<int> vectorResult_Merge;
    vectorResult_Merge.resize(vectorVar2.size() + vectorVar3.size());

    merge(vectorVar2.begin(), vectorVar2.end(), vectorVar3.begin(), vectorVar3.end(), vectorResult_Merge.begin());

    for (vector<int>::iterator iteratorResult_merge = vectorResult_Merge.begin();
         iteratorResult_merge != vectorResult_Merge.end(); iteratorResult_merge++) {
        cout << *iteratorResult_merge << endl;
    }
    cout << "*****************************分割线***************************" << endl;
    //sort 排序
    vector<int> vectorVar4;
    vectorVar4.push_back(10);
    vectorVar4.push_back(30);
    vectorVar4.push_back(20);

    sort(vectorVar4.begin(), vectorVar4.end(), greater<int>());
    for (auto itVar = vectorVar4.begin(); itVar != vectorVar4.end(); itVar++) {
        cout << *itVar << endl;
    }
    cout << endl;
    sort(vectorVar4.begin(), vectorVar4.end(), less<int>());
    for (auto itVar = vectorVar4.begin(); itVar != vectorVar4.end(); itVar++) {
        cout << *itVar << endl;
    }
    cout << "*****************************分割线***************************" << endl;
    //random_shuffle 随机打乱元素的顺序
    vector<int> vectorVar5; // vector默认是没有排序功能的,默认输出: 65 53 84
    vectorVar5.push_back(65);
    vectorVar5.push_back(53);
    vectorVar5.push_back(84);
    vectorVar5.push_back(11);
    vectorVar5.push_back(22);
    vectorVar5.push_back(33);
    vectorVar5.push_back(44);
    vectorVar5.push_back(55);
    vectorVar5.push_back(66);
    vectorVar5.push_back(77);
    vectorVar5.push_back(88);
    sort(vectorVar5.begin(), vectorVar5.end(), greater<int>());

    for (auto itVar = vectorVar5.begin(); itVar != vectorVar5.end(); itVar++) {
        cout << *itVar << "\t";
        // 88	84	77	66	65	55	53	44	33	22	11
    }
    cout << endl;
    random_shuffle(vectorVar5.begin(), vectorVar5.end());
    for (auto itVar = vectorVar5.begin(); itVar != vectorVar5.end(); itVar++) {
        cout << *itVar << "\t";
        //11	84	22	77	88	55	44	66	65	53	33  有问题:CLion+MinGW重复执行结果一样,随机有可能和原生的顺序相同,需要做处理
    }
    cout << endl;
    cout << "*****************************分割线***************************" << endl;
    //copy容器1的元素到容器2
    vector<int> vectorVar6; // vector默认是没有排序功能的,默认输出: 400 200 100 300
    vectorVar6.push_back(400);
    vectorVar6.push_back(200);
    vectorVar6.push_back(100);
    vectorVar6.push_back(300);
    vectorVar6.push_back(500);
    vectorVar6.push_back(600);
    vectorVar6.push_back(700);
    //定义copy结果容器并定义大小
    vector<int> vectorResult_copy;
    vectorResult_copy.resize(vectorVar.size());

    copy(vectorVar6.begin(), vectorVar6.end(), vectorResult_copy.begin());

    for (auto itVar = vectorVar6.begin(); itVar != vectorVar6.end(); itVar++) {
        cout << *itVar << "\t";
        //100  200	300	400	500	600	700

    }
    cout << endl;
    cout << "*****************************分割线***************************" << endl;
    //replace
    vector<int> vectorVar7; // vector默认是没有排序功能的,默认输出: 400 200 100 300
    vectorVar7.push_back(400);
    vectorVar7.push_back(200);
    vectorVar7.push_back(100);
    vectorVar7.push_back(300);
    vectorVar7.push_back(500);
    vectorVar7.push_back(600);
    vectorVar7.push_back(200);

    for (auto itVar = vectorVar7.begin(); itVar != vectorVar7.end(); itVar++) {
        cout << *itVar << "\t";//100	200	300	400	500	600 200
    }
    cout << endl;
    replace(vectorVar7.begin(), vectorVar7.end(), 200, 999);

    for (auto itVar = vectorVar7.begin(); itVar != vectorVar7.end(); itVar++) {
        cout << *itVar << "\t";//100   999	300	400	500	600 999
    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值