文档章节

STL学习记录(十二):非修改类算法

YourFirst
 YourFirst
发布于 2015/10/06 17:06
字数 987
阅读 5
收藏 0

非修改类算法

顾名思义,与修改类算法相比这个类别的算法就是不会对元素的值或者元素之间的位置关系进行改变。这类算法主要就是包括:统计、最大值、最小值、查找等常见的操作。主要的算法与代码示例如下:

操作 说明
count(first,last,value) 在[first, last)中统计值等于value的元素个数
count_if(first,last,p) 在[first,last)中统计元素符合p操作元素的个数
all_of(first,last,p) 判断[first,last)中的所有元素是否都符合p操作
any_of(first,last,p) 判断[first,last)中的元素是否至少有一个符合p操作
none_of(first,last,p) 判断[first,last)中的所有元素是否都不符合p操作
mismatch(first,last,first2) 以pair类型返回[first,last)与first2开始的范围内符合规则的元素(默认为==,可以自定义并以第4参数调用)
equal(first,last,first2) 判断[first,last)与first2开始的范围内元素是否符合规则(默认规则==,可以自定义规则作为第4参数)
find(first,last,value) 查找[first,last)内第一个值为value的元素并返回位置,否则返回last
find_if(first,last,p) 查找[first,last)内第一个满足p操作的元素并返回位置,否则返回last
find_if_not(first,last,p) 查找[first,last)内第一个不满足p操作的元素并返回位置,否则返回last
find_end(first,last,s_first,s_last) 查找[first,last)内最后一个为[s_first,s_last)的子集,并返回开始位置否则返回last(默认为==,可以自定义规则作为第5个参数)
find_first_of(first,last,s_first,s_last) 查找[first,last)内第一个为[s_first,s_last)的子集,并返回开始位置否则返回last(默认为==,可以自定义规则作为第5个参数)
adjacent_find(first,last) 查找第一个相邻相等元素,并返回第一个元素的位置否则返回last(默认为==,可以自定义规则作为第3个参数)
search(first,last,s_first,s_last) 查找[first,last-(s_last-s_first))内第一个为[s_first,s_last)的子集,并返回开始位置否则返回last(默认为==,可以自定义规则作为第5个参数,如果s_first==s_last则返回first)
search_n(first,last,count,value) 查找[first,last)中长度为count值为value的子集(默认为==,可以自定义规则作为第5个参数)
???????????????? 为了表格左侧美观


代码示例:

//count and count_if example
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool IsOdd(int i) { return ((i % 2) == 1); }

int main()
{
    int myints[] = { 10, 20, 30, 30, 20, 10, 10, 20 };   // 8 elements
    int mycount = std::count(myints, myints + 8, 10);
    cout << "10 appears " << mycount << " times." << endl;

    vector<int> myvector{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    mycount = count_if(myvector.begin(), myvector.end(), IsOdd);
    cout << "myvector contains " << mycount << " odd values." << endl;

    return 0;

}

//output:
//10 appears 3 times.
//myvector contains 5 odd values.
// all_of any_of none_of example
#include <iostream> 
#include <algorithm> 
#include <vector>
using namespace std;        

int main () {
    vector<int> foo{3,5,7,11,13,17,19,23};

    if (all_of(foo.begin(), foo.end(), [](int i){return i%2;}))
        cout << "All the elements are odd numbers."<<endl;

    if (any_of(foo.begin(), foo.end(), [](int i){return i<5;}))
        cout << "There is element less than 5 in the range."<<endl;

    if (none_of(foo.begin(), foo.end(), [](int i){return i<3;}))
        cout << "No element less than 3 in the range."<<endl;

    return 0;
}

//output:
//All the elements are odd numbers.
//There is element less than 5 in the range.
//No element less than 3 in the range.
// find find_if find_if_not example
#include <iostream> 
#include <algorithm> 
#include <vector> 
using namespace std;

bool IsOdd(int i) { return ((i % 2) == 1); }

int main() {

    // using find with vector and iterator:
    vector<int> myvector1{ 10, 20, 30, 40 };
    vector<int>::iterator it;
    it = find(myvector1.begin(), myvector1.end(), 30);
    if (it != myvector1.end())
        cout << "Element found in myvector1: " << *it << endl;
    else
        cout << "Element not found in myvector1" << endl;

    // using find_if with vector and iterator:
    vector<int> myvector2{ 1, 2, 3, 4 };
    it = find_if(myvector2.begin(), myvector2.end(), IsOdd);
    if (it != myvector2.end())
        cout << "The first odd value is " << *it << endl;
    else
        cout << "No odd value in myvectoe2" << endl;

    // using find_if_not with vector and iterator:
    it = find_if_not(myvector2.begin(), myvector2.end(), IsOdd);
    if (it != myvector2.end())
        cout << "The first even value is " << *it << endl;
    else
        cout << "No even value in myvectoe2" << endl;

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

YourFirst
粉丝 1
博文 16
码字总数 17792
作品 0
合肥
程序员
私信 提问
VS2010/MFC编程入门教程之目录和总结(鸡啄米)

鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够。以此教程的知识为基础,学习VS2010/MFC较为深入的内容已非难事...

weixin_40647819
2018/05/23
0
0
《鸡啄米C++编程入门系列》系列技术文章整理收藏

《鸡啄米C++编程入门系列》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201812.html 文章 鸡啄米:C++编程入门系列之前言 鸡啄米:C++编程入门系列之一(进制...

开元中国2015
2015/06/27
89
0
C++语言学习之STL 的组成

STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator),容器适配器(container adaptor),函数对象(functor),除此之外还有STL其他标准组件。通俗的讲: 容器:装...

杨坤乾
2014/02/11
701
0
C语言/C++编程学习—代码训练之神奇星空动态继承

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/03/26
0
0
STL list链表的用法详解

------------------------------------------------------------------------------- 原来... STL list链表的用法详解 本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通...

nao
2014/04/10
292
0

没有更多内容

加载失败,请刷新页面

加载更多

秒杀系统思路

业务分析 技术挑战 请求响应要快:无论成功失败,需要尽快返回给用户 架构设计   前端:静态化   站点层:限制请求数   服务层:乐观锁写缓存   数据库CAP:读写高可用,一致性,扩容...

雷开你的门
15分钟前
7
0
最全的教育行业大数据解决方案,个个针对痛点

大数据的悄然兴起也带动了教育行业的革新,移动教育、云课堂等的出现,使得教育行业再次成为了可以中长期保持高景气的行业。然而,初涉数据领域的教育行业同时也面临着相当大的难题,还需要更...

朕想上头条
18分钟前
5
0
预约模块设计分析

1.预约功能描述: 预约是小程序中常见的一种商品管理系统,商家可根据商品或服务的特性,灵活设置预约细节,为用户提供线上预约服务,如场地预约,商品预定等,实现高效经营。 预约场景: ...

鱼煎
22分钟前
4
0
阿里云日志服务构建网站实时分析大盘实战

场景分析 挖掘数据价值是当前企业级网站共同面临的问题。买买网是一个电商平台网站,每天拥有大量的用户访问和购买记录。为了引导用户直接消费,提升购买率和转化率,不同的用户类别需要推荐...

阿里云官方博客
23分钟前
2
0
TL665xF-EasyEVM开发板硬件处理器、NAND FLASH、RAM

广州创龙结合TI KeyStone系列多核架构TMS320C665x及Xilinx Artix-7系列FPGA设计的TL665xF-EasyEVM开发板是一款DSP+FPGA高速大数据采集处理平台,其底板采用沉金无铅工艺的6层板设计,适用于高...

Tronlong创龙
26分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部