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;

}

发布了59 篇原创文章 · 获赞 3 · 访问量 1834

猜你喜欢

转载自blog.csdn.net/Felix_hyfy/article/details/98397722
55
今日推荐