55STL算法
基本概念示例代码
基本概念
变序算法:
删除算法,如: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
;
size_t nNumEvenElements
= count_if(vecIntegers
.begin(), vecIntegers
.end(), IsEven
<int>);
cout
<< "vector里有" << vecIntegers
.size() << "个数,其中偶数有"
<< nNumEvenElements
<< "个!" << endl
;
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
;
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
;
vector
<int>::iterator iPartialRangeLocated
;
iPartialRangeLocated
= search_n(vecIntegers
.begin(), vecIntegers
.end(), 3, 9);
if(iPartialRangeLocated
!= vecIntegers
.end())
{
cout
<< "找到了!位置:" << distance(vecIntegers
.begin(), iPartialRangeLocated
)
<< endl
;
}
else
cout
<< "没找到!" << endl
;
return 0;
}