55STL算法

it2025-05-04  17

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; //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; }
最新回复(0)