在用这些算法时,要在头文件中导入:
#include <algorithm>
find_end() :从容器的末尾位置开始查找符合条件的数据
find_first_of() :查找容器中某个元素首次出现的位置
adjacent_find() :查找容器中重复出现的数据
for_each():遍历容器中的数据元素
find():查找特定的数据,或者说是唯一性的数据
find_if:查找特定范围的数据,这些数据在一个范围内
下面列举了后三项代码。
代码如下:
// k.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; void addsalary(int& nSalary) { if (nSalary < 2000) { nSalary *= 1.3; } } bool ispass(int& n) { return n >= 60; } int _tmain(int argc, _TCHAR* argv[]) { /*for_each的用法 vector<int> vecSalary; vecSalary.push_back(3200); vecSalary.push_back(1983); vecSalary.push_back(703); for_each(vecSalary.begin(), vecSalary.end(), addsalary);*/ //find()的用法 /*vector<string> vecGoods; vecGoods.push_back("Eraser"); vecGoods.push_back("Book"); vecGoods.push_back("Pen"); string strGood = "Pencil"; vector<string>::iterator it = find(vecGoods.begin(), vecGoods.end(), strGood); if (it != vecGoods.end()) { cout<<"恭喜本店提供: "<<strGood<<endl; } else { cout<<"抱歉,本店不提供: "<<strGood<<endl; }*/ vector<int> vecScores; vecScores.push_back(72); vecScores.push_back(54); vecScores.push_back(87); vector<int>::iterator it = vecScores.begin(); do { it = find_if(it, vecScores.end(), ispass); if (it != vecScores.end()) { cout<<"找到及格分数为:"<<*it<<endl; ++it; } else { break; } } while (true); return 0; }
以下为remove()和replace_if()算法:
// k.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; bool isfall(int& nScore) { return nScore < 60 ? true : false ; } int _tmain(int argc, _TCHAR* argv[]) { vector<int> vecScore; vecScore.push_back(82); vecScore.push_back(-1); vecScore.push_back(32); //用一个新的itend来表示删除后,容器结束的位置 vector<int>::iterator itend = remove(vecScore.begin(), vecScore.end(), -1); replace_if(vecScore.begin(), itend, isfall, 60); cout<<"处理后的成绩:"<<endl; for (auto it = vecScore.begin(); it != vecScore.end(); ++it) { cout<<*it<<endl; } return 0; }