STL_算法_元素计数(count、count_if)
C++ Primer 学习中。。
。
简单记录下我的学习过程 (代码为主)
count 、 count_if
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;/***********************
count
count_if
关联容器的等效成员函数set.countmultiset.countmap.countmultimap.count
************************/
/*********************** std::count:****************************************
template <class InputIterator, class T>typename iterator_traits<InputIterator>::difference_typecount ( ForwardIterator first, ForwardIterator last, const T& value );
//eg:
template <class InputIterator, class T>ptrdiff_t count ( InputIterator first, InputIterator last, const T& value )
{ptrdiff_t ret=0;while (first != last) if (*first++ == value) ++ret;return ret;
}
*******************************************************************************//*********************** std::count_if:****************************************
template <class InputIterator, class Predicate>typename iterator_traits<InputIterator>::difference_typecount_if ( ForwardIterator first, ForwardIterator last, Predicate pred );
//eg:
template <class InputIterator, class Predicate>ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate pred )//pred 为函数or函数对象
{ptrdiff_t ret=0;while (first != last) if (pred(*first++)) ++ret;return ret;
}
*******************************************************************************///奇数
bool IsOdd (int i)
{return i&1;
}int main()
{int mycount;// counting elements in array:int myints[] = {10,20,30,30,20,10,10,20}; // 8 elementsmycount = (int) count (myints, myints+8, 10);cout << "10 appears " << mycount << " times.\n";// counting elements in container:vector<int> myvector (myints, myints+8);mycount = (int) count (myvector.begin(), myvector.end(), 20);//有几个20cout << "20 appears " << mycount << " times.\n";/****************Output:10 appears 3 times.20 appears 3 times.****************/// vector<int> myvector;myvector.clear();for (int i=1; i<10; i++) myvector.push_back(i); // myvector: 1 2 3 4 5 6 7 8 9cout<<"\nmyvector: 1 2 3 4 5 6 7 8 9 \n";
// mycount = (int) count_if (myvector.begin(), myvector.end(), IsOdd);mycount = (int) count_if (myvector.begin(), myvector.end(), bind2nd(modulus<int>(),2));//表示param1 % 2cout << "myvector contains " << mycount << " odd values.\n";//奇数
// 假设求偶数的个数 not1,1表示一个參数取反mycount = (int) count_if (myvector.begin(), myvector.end(), not1(bind2nd(modulus<int>(),2)));//表示!(param1 % 2)cout << "myvector contains " << mycount << " even values.\n";//偶数/****************Output:myvector contains 5 odd values.****************/
// 函数适配器 函数对象
// bind2nd(op,value);表示绑定第二个数 param1 > 4 这里表示统计大于4的个数mycount=count_if(myvector.begin(),myvector.end(),bind2nd(greater<int>(),4));cout<<"有"<<mycount<<"个数大于4"<<endl;
//拓展练习 4 > param2mycount=count_if(myvector.begin(),myvector.end(),bind1st(greater<int>(),4));cout<<"有"<<mycount<<"个数小于4"<<endl;
// 4 < param2mycount=count_if(myvector.begin(),myvector.end(),bind1st(less<int>(),4));cout<<"有"<<mycount<<"个数大于4"<<endl;
// param1 >= 4mycount=count_if(myvector.begin(),myvector.end(),bind2nd(greater_equal<int>(),4));cout<<"有"<<mycount<<"个数大于等于4"<<endl;
// param1 <= 4mycount=count_if(myvector.begin(),myvector.end(),bind2nd(less_equal<int>(),4));cout<<"有"<<mycount<<"个数小于等于4"<<endl;/****关联容器****/multiset<int> ms(myvector.begin(),myvector.end());ms.insert(myvector.begin(),myvector.begin()+6);ms.insert(myvector.begin(),myvector.begin()+4);ms.insert(myvector.begin(),myvector.begin()+2);ms.insert(1);multiset<int>::iterator ims=ms.begin();while(ims!=ms.end()){cout<<*ims++<<" ";}cout<<endl;//两种方法求1的个数int cnt=count(ms.begin(),ms.end(),1);//全部容器适用可是比較慢些cout<<"multiset里有"<<cnt<<"个1."<<endl;cnt=ms.count(1);//关联容器专享 set已经排序能够高速计数cout<<"multiset里有"<<cnt<<"个1."<<endl;return 0;
}
STL_算法_元素计数(count、count_if)相关推荐
- STL_算法_区间的比較(equal、mismatch、 lexicographical_compare)
C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) //全部容器适用 equal(b,e,b2) //用来比較第一个容器[b,e)和第二个容器b2开头,是否相等 e ...
- sqlserver 根据数组排序_看动画学算法之:排序-count排序
简介 今天我们介绍一种不需要作比较就能排序的算法:count排序. count排序是一种空间换时间的算法,我们借助一个外部的count数组来统计各个元素出现的次数,从而最终完成排序. count排序的 ...
- STL_算法(25)_逆转和旋转 revers() 、reverse_copy()、rotate()、rotate_copy()、
STL_算法(25)_逆转和旋转 revers() . reverse_copy(). rotate(). rotate_copy(). STL变序性算法 revers() . reverse_cop ...
- python中满足条件相加_符合Python中特定条件的元素计数
在本文中,我们将看到如何从Python列表中获取一些选定的元素.因此,我们需要设计一些条件,并且仅应选择满足该条件的元素并打印其计数. 求和 在这种方法中,我们有条件地选择元素并使用一些元素来获取它们 ...
- 蝴蝶优化算法_腾讯机智团队分享--AllReduce算法的前世今生
从事分布式深度学习相关工作的同学,应该都频繁地用到了AllReduce(规约)操作. 图1 AllReduce的示意图 但是对于训练框架中集成的AllReduce相关操作,其背后实现的原理是什么? 除 ...
- java 线性的排序算法_数据结构之排序算法Java实现(9)—— 线性排序之 基数排序算法...
基数排序算法是计数排序的延伸,计数排序会造成很大的空间浪费,但基数排序法是对位数进行排序,适合于位数之间相差较大的情况,废话不多说,直接上代码: 升序排序法: /** * 基数排序法 * 升序排列 * ...
- JVM上篇_15-垃圾回收相关算法_尚硅谷
1 垃圾标记阶段的算法值引用计数算法 垃圾标记阶段:对象存活判断 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象.只有被标记为 ...
- 典型的Top K算法_找出一个数组里面前K个最大数
原文 典型的Top K算法_找出一个数组里面前K个最大数...或找出1亿个浮点数中最大的10000个...一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入 ...
- JS数据结构与算法_链表
上一篇:JS数据结构与算法_栈&队列 下一篇:JS数据结构与算法_集合&字典 写在前面 说明:JS数据结构与算法 系列文章的代码和示例均可在此找到 上一篇博客发布以后,仅几天的时间竟然 ...
最新文章
- 政府安全资讯精选 2017年第六期 车联网和移动安全可能成为未来监管重点
- 2019蓝桥杯省赛---java---B---1(组队)
- 2016/06/22 中色启动筹码分析作业
- python生成器迭代_python中的生成器和迭代器
- 听 Fabien Potencier 谈Symfony2 之 《What is Symfony2 ?》
- 如何检查PHP数组是关联数组还是顺序数组?
- weblogic使用脚本部署
- tp3.2 配置相关说明
- phpspider 爬取汉谜网
- 数据通信与计算机网络
- Python熵权法确定权重
- 不显示BOM清单的版本
- 机智云——燃烧激情,点燃梦想,创业维艰,砥砺前行
- Unity Shader - shader forge - #pragma only_renderers 和 exclude_renderers - 导致像素全黑
- 在sagemath中运行python文件
- ant design pro v5 之 ProForm自定义表单项
- miui7 android系统版本,miui7系统
- matlab求梯度的原理,matlab 梯度计算原理
- ArcGIS JavaScript for API(003):geojsonlayer
- Springboot设置多数据源,随时切换
热门文章
- php pdo dblib,PHP DBlib PDO问题
- C++安全方向(三):3.8 openssl单项散列章节总结
- jsp中有比nbsp更好的吗_直线导轨有不锈钢的吗?雅威达告诉您
- 拉普拉斯算子属于卷积方法吗_2020 年 GNN 开卷有益与再谈图卷积
- android关键应用程序,Android应用程序基础.pdf
- mysql随机查询多条记录表_MySQL 随机查询表中N条记录
- SQLAlchemy Tutorial
- Web_audio_spatialization_basics
- MongoDB Project Fields
- linux 命令行图形界面切换