1 统计vector向量中指定元素出现的次数:count()算法

利用STL通用算法统计vector向量中某个元素出现的次数:count()算法统计等于某个值的对象的个数。

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm> //包含通用算法

using namespace std;

int_tmain(int argc, _TCHAR* argv[])

{

vector<int> scores;

scores.push_back(100);

scores.push_back(80);

scores.push_back(45);

scores.push_back(75);

scores.push_back(99);

scores.push_back(100);

int num = 0;

num= count(scores.begin(),scores.end(),100);//统计100出现的次数

cout<<"times: "<<num<<endl;

return 0;

}

2 count_if():利用函数对象统计满足条件对象的个数

函数对象是一个至少带有一个operator()方法的类。

函数对象被约定为STL算法调用operator时返回true或false,它们根据这个来判定这个函数。

count_if()函数通过传递一个函数对象来做出比count()统计函数更加复杂的评估以确定一个对象是否应该被计数,即count_if()函数的功能等同于count()函数和一些条件语句。

例子:1

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm>

#include <string>

using namespace std;

conststring TC("0003");

classIsTB

{

public:

IsTB(){cout<<"执行默认构造函数"<<endl;}

bool operator()(string& saleRecord)

{

return (saleRecord.substr(0,4) == TC);

}

};

int_tmain(int argc, _TCHAR* argv[])

{

vector<string>saleRecordVec;

saleRecordVec.push_back("0001 Soap");

saleRecordVec.push_back("0002 Shampoo");

saleRecordVec.push_back("0003 ToothBrush");

saleRecordVec.push_back("0004 Toothpaste");

saleRecordVec.push_back("0003 ToothBrush");

int num = 0;

num= count_if(saleRecordVec.begin(),saleRecordVec.end(),IsTB());

cout<<"Times: "<<num<<endl;

IsTBobjIsTB;

//利用已有的对象

num= count_if(saleRecordVec.begin(),saleRecordVec.end(),objIsTB);

cout<<"Times: "<<num<<endl;

return 0;

}

count_if()函数的第三个参数是类对象。

执行结果:

如果需要给函数对象传递更多的信息,那么可以通过定义一个非缺省的构造函数来初始化所需要的信息。

例子:2

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm>

#include <string>

using namespace std;

classIsTB

{

public:

IsTB(string& str){ m_str =str;} //通过构造函数传递信息

bool operator()(string&saleRecord)

{

return (saleRecord.substr(0,4) == m_str);

}

private:

stringm_str;

};

int_tmain(int argc, _TCHAR* argv[])

{

vector<string>saleRecordVec;

saleRecordVec.push_back("0001 Soap");

saleRecordVec.push_back("0002 Shampoo");

saleRecordVec.push_back("0003 ToothBrush");

saleRecordVec.push_back("0004 Toothpaste");

saleRecordVec.push_back("0003 ToothBrush");

int num = 0;

stringstr("0003");

num= count_if(saleRecordVec.begin(),saleRecordVec.end(),IsTB(str));

cout<<"Times: "<<num<<endl;

IsTBobjIsTB(str);

//利用已有的对象

num= count_if(saleRecordVec.begin(),saleRecordVec.end(),objIsTB);

cout<<"Times: "<<num<<endl;

return 0;

}

STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法的更多相关文章

  1. STL 查找vector容器中的指定对象:find()与find_if()算法

    1 从vector容器中查找指定对象:find()算法 STL的通用算法find()和find_if()可以查找指定对象,参数1,即首iterator指着开始的位置,参数2,即次iterator指着停 ...

  2. 删除map容器中指定的元素

    for (std::map<Int64,Int64>::iterator iter = ips_forbidden_.begin(); iter != ips_forbidden_.end ...

  3. 跟我一起学STL(2)——vector容器详解

    一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...

  4. vector容器中添加和删除元素

    添加元素: 方法一: insert() 插入元素到Vector中 iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入 ...

  5. 带你深入理解STL之Vector容器

    C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...

  6. 【C++】STL,vector容器操作

    C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...

  7. STL之Vector容器

    1.Vector容器 1)vector是将元素置于一个动态数组中加以管理的容器. 2)vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). 3)vecto ...

  8. 【Java面试题】54 去掉一个Vector集合中重复的元素

    在Java中去掉一个 Vector 集合中重复的元素 1)通过Vector.contains()方法判断是否包含该元素,如果没有包含就添加到新的集合当中,适用于数据较小的情况下. import jav ...

  9. ca12a_c++顺序容器的操作5_访问容器中的数据元素

    ca12a_c++顺序容器的操作5_访问容器中的数据元素访问元素:c.back()..显示最后一个数据c.front() ..显示第一个数据c[n],n就是下标,适合vector与dequec.at( ...

随机推荐

  1. ASP.NET C# 有程序集加不了解决办法

    在项目中添加app.config 获取在 web.config 添加 <?xml version="1.0"?> <configuration> <s ...

  2. USB学习小记-HID类键盘的报告描述符的理解

    前言 断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的.利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧. 在学习过程中, ...

  3. 生成war的jdk版本高于tomcat使用的jdk版本,导致项目不能正常被访问

    记录一个耽误30分钟的一个坑: 生成war的jdk版本高于tomcat使用的jdk版本,导致项目不能正常被访问 报404错误

  4. Blacksmith test

    最近使用Blacksmith 对各种K,V数据库做了一些测试,从中了解了一些各种数据库的设计方式,比较各种数据库的性能 BlaskSmith是我们自己的产品,详细的产品信息可以在github上看到 h ...

  5. logstash 处理nginx 访问日志

    [root@dr-mysql01 frontend]# cat logstash_frontend.conf input { file { type => "zj_frontend_a ...

  6. Linux进程间通信——使用命名管道

    在前一篇文章——Linux进程间通信——使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都由一个共同的祖先进程启动,这给我们在不相关的的进程 ...

  7. 如何让FPGA中的SPI与其他模块互动起来

    在上一篇文章<FPGA的SPI从机模块实现>中,已经实现了SPI的从机模块,如何通过SPI总线与FPGA内部其他模块进行通信,是本文的主要讨论内容. 一. 新建FPGA内部DAC控制模块 ...

  8. web开发(Java&Jquery)实现验证码

    1. Ajax Fancy Capcha 一个支持 Ajax 又很炫的 jQuery Captcha 插件,它使用了很人性化的验证机制. ​ from : http://www.webdesignbe ...

  9. hdu 4686 Arc of Dream_矩阵快速幂

    题意:略 构造出矩阵就行了 |   AX   0    AXBY   AXBY       0  |                                                   ...

  10. MD5和SHA512Managed ——哈希算法

    本文来自:http://www.cnblogs.com/chuncn/archive/2008/02/26/1082418.html C#的哈希 哈希算法是啥?哈希英文hash,是一种数学算法,它能把 ...