//算法包函数
#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;
}
C++ 算法包(STL)函数(sort random_shuffle replace copy for_each count_if find_if)
最新推荐文章于 2024-03-22 21:01:13 发布