1. 函数适配器(bind2nd)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <iostream> #include <set> // stl包 #include <algorithm> // 算法包 using namespace std;
int main() {
set<string, less<string>> setVar; setVar.insert("AAAA"); setVar.insert("BBBB"); setVar.insert("CCCC");
for (set<string>::iterator iteratorVar = setVar.begin(); iteratorVar != setVar.end() ; iteratorVar++) { cout << *iteratorVar << endl; }
set<string, less<string>>::iterator iteratorResult =
find_if(setVar.begin(), setVar.end(), bind2nd(equal_to<string>(), "CCCC"));
if (iteratorResult != setVar.end()) { cout << "查找到了" << endl; } else { cout << "没有查找到" << endl; }
return 0; }
|
2. for_each遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包 using namespace std;
class __F { public: void operator() (int __first) { cout << "自定义一元谓词:" << __first << endl; } };
int main() { vector<int> vectorVar; vectorVar.insert(vectorVar.begin(), 10000); vectorVar.insert(vectorVar.begin(), 20000); vectorVar.insert(vectorVar.begin(), 30000); vectorVar.insert(vectorVar.begin(), 40000); vectorVar.insert(vectorVar.begin(), 50000); vectorVar.insert(vectorVar.begin(), 60000);
for_each(vectorVar.begin(), vectorVar.end(), __F());
return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包 using namespace std;
class __unary_op { public: int operator() (const int __first) { return __first + 9; } };
int main() { vector<int> vectorVar; vectorVar.insert(vectorVar.begin(), 10000); vectorVar.insert(vectorVar.begin(), 20000); vectorVar.insert(vectorVar.begin(), 30000); vectorVar.insert(vectorVar.begin(), 40000);
transform(vectorVar.begin(), vectorVar.end(), vectorVar.begin(), __unary_op());
for (auto it = vectorVar.begin(); it != vectorVar.end() ; it++) { cout << "第一种方式:" << *it << endl; } cout << endl;
vector<int> vectorVarResult; vectorVarResult.resize(vectorVar.size()); transform(vectorVar.begin(), vectorVar.end(), vectorVarResult.begin(), __unary_op());
for (auto it = vectorVarResult.begin(); it != vectorVarResult.end() ; it++) { cout << "第二种方式:" << *it << endl; }
return 0; }
|
4.查找函数
4.1 find函数
find函数直接接受需要查找的内容,不接收仿函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| int main() { vector<int> vectorVar; vectorVar.insert(vectorVar.begin(), 10000); vectorVar.insert(vectorVar.begin(), 20000); vectorVar.insert(vectorVar.begin(), 30000); vectorVar.insert(vectorVar.begin(), 40000);
auto iteratorVar = find(vectorVar.begin(), vectorVar.end(), 40000); if (iteratorVar != vectorVar.end()) { cout << "查找到了" << endl; } else { cout << "没有找到" << endl; } return 0;
}
|
4.2 find_if函数
find_if函数可以接收一个仿函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| class __pred { public: int number; __pred(int number) : number(number) {} bool operator() (const int value) { return number == value; } };
int main() { vector<int> vectorVar; vectorVar.insert(vectorVar.begin(), 10000); vectorVar.insert(vectorVar.begin(), 20000); vectorVar.insert(vectorVar.begin(), 30000); vectorVar.insert(vectorVar.begin(), 40000);
auto it = find_if(vectorVar.begin(), vectorVar.end(), __pred(30000));
if (it != vectorVar.end()) { cout << "查找到了" << endl; } else { cout << "没有找到" << endl; } return 0;
}
|
5. 统计元素个数
5.1 count函数和count_if函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包
using namespace std;
int main() { vector<int> vectorVar; vectorVar.push_back(1); vectorVar.push_back(2); vectorVar.push_back(3); vectorVar.push_back(2); vectorVar.push_back(4); vectorVar.push_back(6); vectorVar.push_back(8); vectorVar.push_back(1);
int number = count(vectorVar.begin(), vectorVar.end(), 2); cout << "等于2的个数是:" << number << endl;
number = count_if(vectorVar.begin(), vectorVar.end(), bind2nd(less<int>(), 2)); cout << "小于2的个数是:" << number << endl;
number = count_if(vectorVar.begin(), vectorVar.end(), bind2nd(greater<int>(), 2)); cout << "大于2的个数是:" << number << endl;
number = count_if(vectorVar.begin(), vectorVar.end(), bind2nd(equal_to<int>(), 2)); cout << "等于2的个数是:" << number << endl;
return 0;
}
|
6. 合并函数(merge)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包
using namespace std;
int main() { vector<int> vectorVar1; vectorVar1.push_back(10); vectorVar1.push_back(20); vectorVar1.push_back(30); vectorVar1.push_back(40);
vector<int> vectorVar2; vectorVar2.push_back(50); vectorVar2.push_back(60); vectorVar2.push_back(70); vectorVar2.push_back(80);
vector<int> vectorResult; vectorResult.resize(vectorVar1.size() + vectorVar2.size());
merge(vectorVar1.begin(), vectorVar1.end(), vectorVar2.begin(), vectorVar2.end(), vectorResult.begin()); for (auto itVar = vectorResult.begin(); itVar != vectorResult.end() ; itVar++) { cout << *itVar <<endl; }
return 0;
}
|
7. 对容器进行排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包
using namespace std;
int main() { vector<int> vectorVar; vectorVar.push_back(10); vectorVar.push_back(30); vectorVar.push_back(20);
sort(vectorVar.begin(), vectorVar.end(), less<int>());
for (auto itVar = vectorVar.begin(); itVar != vectorVar.end() ; itVar++) { cout << *itVar <<endl; } }
|
8. 对容器元素进行打乱
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包
using namespace std;
int main() { vector<int> vectorVar; vectorVar.push_back(65); vectorVar.push_back(53); vectorVar.push_back(84); vectorVar.push_back(11); vectorVar.push_back(22); vectorVar.push_back(33); vectorVar.push_back(44);
sort(vectorVar.begin(), vectorVar.end(), less<int>());
random_shuffle(vectorVar.begin(), vectorVar.end());
for (auto itVar = vectorVar.begin(); itVar != vectorVar.end() ; itVar++) { cout << *itVar << "\t"; } return 0; }
|
9. 复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包
using namespace std;
int main() { vector<int> vectorVar; vectorVar.push_back(100); vectorVar.push_back(200); vectorVar.push_back(300); vectorVar.push_back(400); vectorVar.push_back(500); vectorVar.push_back(600); vectorVar.push_back(700);
vector<int> vectorResult; vectorResult.resize(vectorVar.size());
copy(vectorVar.begin(), vectorVar.end(), vectorResult.begin());
for (auto itVar = vectorResult.begin(); itVar != vectorResult.end() ; itVar++) { cout << *itVar << "\t"; }
return 0; }
|
10. 替换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include <iostream> #include <vector> // stl包 #include <algorithm> // 算法包
using namespace std;
int age;
void set(int age) { ::age = age; }
int main() { vector<int> vectorVar; vectorVar.push_back(100); vectorVar.push_back(200); vectorVar.push_back(300); vectorVar.push_back(400); vectorVar.push_back(500); vectorVar.push_back(600);
replace(vectorVar.begin(), vectorVar.end(), 300, 333);
for (auto itVar = vectorVar.begin(); itVar != vectorVar.end() ; itVar++) { cout << *itVar << "\t"; }
return 0; }
|
版权声明: 此文章版权归Jack Ou所有,如有转载,请註明来自原作者