C++ STL 之 常用算法

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// transform 将一个容器的元素 搬运 到另一个容器中
struct MyPlus
{
    int operator()(int val)
    {
        return val + 100;
    }
};

void MyPrint(int val)
{
    cout << val << " ";
}

void test01()
{
    vector<int> v1;
    vector<int> v2;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    v2.resize(v1.size()); // 开辟空间
    transform(v1.begin(), v1.end(), v2.begin(), MyPlus());
    for_each(v2.begin(), v2.end(), MyPrint);
    cout << endl;
    cout << "--------------------" << endl;
}

// 常用的查找算法
void test02()
{
    vector<int> v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    vector<int>::iterator ret = find(v1.begin(), v1.end(), 5);
    if (ret == v1.end())
    {
        cout << "没有找到!" << endl;
    }
    else
    {
        cout << "找到了:" << *ret << endl;
    }
    cout << "--------------------" << endl;
}

class Person
{
public:
    Person(int age, int id) : age(age), id(id){}
    bool operator== (const Person& p)
    {
        return p.id == this->id && p.age == this->age;
    }
public:
    int id;
    int age;
};

void test03()
{
    vector<Person> v1;
    Person p1(10, 20), p2(20, 30);
    v1.push_back(p1);
    v1.push_back(p2);
    vector<Person>::iterator ret = find(v1.begin(), v1.end(), p1);
    if (ret == v1.end())
    {
        cout << "没有找到!" << endl;
    }
    else
    {
        cout << "找到了!" << endl;
    }
    cout << "--------------------" << endl;
}

bool MySearch(int val)
{
    return val > 5;
}

bool MySearch2(int val)
{
    return val > 5;
}

void test04()
{
    vector<int> v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    v1.push_back(9);
    bool ret = binary_search(v1.begin(), v1.end(), 5);
    if (ret)
    {
        cout << "找到了!" << endl;
    }
    else
    {
        cout << "没有找到!" << endl;
    }

    vector<int>::iterator it = adjacent_find(v1.begin(), v1.end());
    if (it != v1.end())
    {
        cout << "找到相邻重复元素:" << *it << endl;
    }
    else
    {
        cout << "没有找到相邻重复元素!" << endl;
    }

    // find_f 会根据我们的条件(函数) ,返回第一个满足条件的元素的迭代器
    it = find_if(v1.begin(), v1.end(), MySearch);
    if (it != v1.end())
    {
        cout << "找到:" << *it << endl;
    }
    else
    {
        cout << "没有找到!" << endl;
    }

    // count count_if
    int num = count(v1.begin(), v1.end(), 9);
    cout << "9出现的次数:" << num << endl;
    num = count_if(v1.begin(), v1.end(), MySearch2);
    cout << "大于5的个数:" << num << endl;
}

int main()
{
    test01();
    test02();
    test03();
    test04();
    getchar();
    return 0;
}

原文地址:https://www.cnblogs.com/duxie/p/10940235.html

时间: 2024-10-31 11:21:26

C++ STL 之 常用算法的相关文章

STL中的常用算法

C++STL 常用算法,使用时包含#include <algorithm> 一.非变异算法 是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理.元素查找.子序列搜索.统计和匹配.非变异算法具有极为广泛的适用性,基本上可应用与各种容器. 1查找容器元素find 它用于查找等于某值的元素.它在迭代器区间[first,last)(闭开区间)上查找等于value值的元素,如果迭代器i所指的元素满足*i=value,则返回迭代器i:未找到满足条件的元素,返回last.函数原型:find( v1.

STL 常用算法

1.      STL 常用算法 l  for_each() 例1 //普通函数 voidFuncShowElemt2(int &t) { cout << t << " "; } vector<int> v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); //通过回调函数  谁使用for_each 谁去填写回调函数的入口地址 for_each(v1.begin(), v1.end(),

STL——配接器、常用算法使用

学习STL,必然会用到它里面的适配器和一些常用的算法.它们都是STL中的重要组成部分. 适配器 在STL里可以用一些容器适配得到适配器.例如其中的stack和queue就是由双端队列deque容器适配而来.其实适配器也是一种设计模式,该种模式是将一个类的接口转换成用户希望的另外一个接口.简单的说:就是需要的东西就在眼前,但却不能用或者使用不是很方便,而短时间又无法改造它,那我们就通过已存在的东西去适配它. STL中的适配器一共有三种: ①应用于容器的即容器适配器:比如stack和queue就是对

[C++ STL] 常用算法总结

1 概述 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包含<numeric>,<functional>中则定义了一些模板类,用来声明函数对象. 2 常用算法介绍 STL中算法大致分为四类: 非可变序列算法:指不直接修改其所操作的容器内容的算法. 可变序列算法:指可以修改它们所操作的容器内容的算法. 排序

常用STL容器及算法举例

一 常用容器举例 1 vector: vector类似于动态数组,直接访问元素,从后面快速插入或者删除,示例代码如下: [cpp] view plaincopyprint? #include <iostream> #include <vector>//包含vector using namespace std;//指定命名空间 int main() { cout<<"----------vector test-----------"<<en

(转)常用算法(Algorithm)的用法介绍

2算法部分主要由头文件<algorithm>,<numeric>和<functional>组成. 2<algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较.交换.查找.遍历操作.复制.修改.反转.排序.合并等等. 2<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作. 2<functional>中则定义了一些模板类,用以声明函数对象. 2STL提供

ACM中常用算法----字符串

ACM中常用算法--字符串 ACM中常用的字符串算法不多,主要有以下几种: Hash 字典树 KMP AC自动机 manacher 后缀数组 EX_KMP SAM(后缀自动机) 回文串自动机 下面来分别介绍一下: 0. Hash 字符串的hash是最简单也最常用的算法,通过某种hash函数将不同的字符串分别对应到不同的数字.进而配合其他数据结构或STL可以做到判重,统计,查询等操作. #### 字符串的hash函数: 一个很简单的hash函数代码如下: ull xp[maxn],hash[max

C++标准模板库-STL库基本算法

原文链接:http://blog.csdn.net/wangfengwf/article/details/11580989#t9 16.4  STL库基本算法 标准C++STL库中算法组件为一个很重要的组成部分,该组件提供了大多数最常见的通用算法的实现,并且这些实现是经过很多测试试验并被公认在处理上是高效的.将这些最常见的算法通用化实现,最大的优势就是开发者在应用中不需要为具体的常见算法的实现而费神,只需要包含相应的头文件直接使用即可,不仅仅提高的软件开发的效率,同时还有助于软件重用性的提高.

STL中常用的vector,map,set 用法

STL中常用的vector,map,set 用法 C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库.容器往往包含同一类型的数据.STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等. . 一. vector 1.声明: 一个vector类似于一个动态的一维数组. vector中可以存在重复的元素! vector<int> a;          // 声明一个元素为int类型的vector a vectot&