基本概念
变序算法:
- 删除算法,如:remove、remove_if、remove_copy
- 修改算法,如:for_each、transform
- 排序算法,如:sort、stable_sort、partial_sort
非变序算法:
- 计数算法,如:count、count_if
- 搜索算法,如:search、find、find_if、find_first_of
- 比较算法,如:equal、mismatch、lexicographical_compare
示例代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <list>
using namespace std;
template<typename elementType>
bool IsEven(const elementType& number)
{
return ((number % 2) == 0);
}
int main()
{
vector<int> vecIntegers;
for(int nNum = -9; nNum < 10; ++nNum)
vecIntegers.push_back(nNum);
vector<int>::const_iterator iElementLocator;
for(iElementLocator = vecIntegers.begin();
iElementLocator != vecIntegers.end();
++iElementLocator)
cout << *iElementLocator << ' ';
cout << endl << endl;
size_t nNumZeros = count(vecIntegers.begin(), vecIntegers.end(), 0);
cout << "vector里有" << nNumZeros << "个0!" << endl;
//count_if算法,第三个参数是个谓词
size_t nNumEvenElements = count_if(vecIntegers.begin(), vecIntegers.end(), IsEven<int>);
cout << "vector里有" << vecIntegers.size() << "个数,其中偶数有"
<< nNumEvenElements << "个!" << endl;
//find算法
vector<int>::iterator iElementFound;
iElementFound = find(vecIntegers.begin(), vecIntegers.end(), 3);
if(iElementFound != vecIntegers.end())
cout << "结果:找到了!" << endl;
else
cout << "结果:没找到!" << endl;
vector<int>::iterator iEvenNumber;
iEvenNumber = find_if(vecIntegers.begin(), vecIntegers.end(), IsEven<int>);
if(iEvenNumber != vecIntegers.end())
{
cout << "找到了:" << *iEvenNumber << endl;
cout << "位置:" << distance(vecIntegers.begin(), iEvenNumber) << endl;
}
else
cout << "没找到!" << endl;
//search算法 寻找一段序列
vecIntegers.push_back(9);
vecIntegers.push_back(9);
list<int> listIntegers;
for(int nNum = -4; nNum != 5; ++nNum)
listIntegers.push_back(nNum);
vector<int>::iterator iRangeLocated;
iRangeLocated = search(vecIntegers.begin(), vecIntegers.end(),
listIntegers.begin(), listIntegers.end());
if(iRangeLocated != vecIntegers.end())
{
cout << "找到了!位置:" << distance(vecIntegers.begin(), iRangeLocated)
<< endl;
}
else
cout << "没找到!" << endl;
//search_n算法
vector<int>::iterator iPartialRangeLocated;
iPartialRangeLocated = search_n(vecIntegers.begin(), vecIntegers.end(), 3, 9); //找3个9
if(iPartialRangeLocated != vecIntegers.end())
{
cout << "找到了!位置:" << distance(vecIntegers.begin(), iPartialRangeLocated)
<< endl;
}
else
cout << "没找到!" << endl;
return 0;
}