1 从vector容器中查找指定对象:find()算法

STL的通用算法find()和find_if()可以查找指定对象,参数1,即首iterator指着开始的位置,参数2,即次iterator指着停止处理的地方。注意:包含开始和结束的位置的元素。例子:

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int_tmain(int argc, _TCHAR* argv[])

{

vector<char*> fruitVec;

vector<char*>::iterator fruitIt;

fruitVec.push_back("Apple");

fruitVec.push_back("Pineapple");

fruitVec.push_back("Star Apple");

fruitIt= find(fruitVec.begin(),--(fruitVec.end()),"Star Apple");

if(fruitIt == fruitVec.end())

{

cout<<"没找到"<<endl;

}

else

{

cout<<"找到了:"<<*fruitIt<<endl;

}

return 0;

}

执行结果:找到了:Star Apple

2 利用函数对象进行查找:find_if()

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm>

#include <string>

using namespace std;

classIsTB

{

public:

IsTB(char* pChar,int nLen)

{

cout<<"执行构造函数"<<endl;

m_nLen= nLen;

m_pChar= new char[m_nLen+1];

strcpy(m_pChar,pChar);

}

IsTB(const IsTB& objTB) //需要定义拷贝构造函数

{

cout<<"执行拷贝构造函数"<<endl;

m_nLen= objTB.m_nLen;

m_pChar= new char[m_nLen+1];

strcpy(m_pChar,objTB.m_pChar);

}

bool operator()(const char* pChar)

{

return (strcmp(pChar,m_pChar) == 0);

}

~IsTB()

{

delete m_pChar;

cout<<"执行析构函数"<<endl;

}

public:

char* m_pChar;

int m_nLen;

};

int_tmain(int argc, _TCHAR* argv[])

{

vector<char*> fruitVec;

vector<char*>::iterator fruitIt;

fruitVec.push_back("Apple");

fruitVec.push_back("Pineapple");

fruitVec.push_back("Red Apple");

fruitVec.push_back("Star Apple");

//IsTB objTB("Star Apple",10);//第中方式:先生成对象

//fruitIt = find_if(fruitVec.begin(),fruitVec.end(),objTB);//第中方式,再使用对象

fruitIt= find_if(fruitVec.begin(),fruitVec.end(),IsTB("StarApple",10)); //第一种方式:直接生成临时对象

if(fruitIt == fruitVec.end())

{

cout<<"没找到"<<endl;

}

else

{

cout<<"找到了:"<<*fruitIt<<endl;

}

return 0;

}

第一种方式执行结果:

第2种方式的执行结果:

第2种方式中,执行一次拷贝构造函数我可以理解,但是执行两次,就不理解了。

有理解的麻烦告诉一声,非常感谢。

STL 查找vector容器中的指定对象:find()与find_if()算法的更多相关文章

  1. STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法

    1 统计vector向量中指定元素出现的次数:count()算法 利用STL通用算法统计vector向量中某个元素出现的次数:count()算法统计等于某个值的对象的个数. #include &quo ...

  2. 从vector容器中查找一个子串:search()算法

    如果要从vector容器中查找是否存在一个子串序列,就像从一个字符串中查找子串那样,次数find()与find_if()算法就不起作用了,需要采用search()算法:例子: #include &qu ...

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

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

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

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

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

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

  6. 如何快速方便的输出向量vector容器中不重复的内容

    在vector容器中,存入的内容难免会出现重复,那么如何快速输出或提前非重复的那些数据呢,即重复的数据只输出一次,直观的方法是每次输出都要通过循环比较是否已经输出过,这种方法还是比较费时的,可以利用u ...

  7. STL之vector容器详解

    vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...

  8. [转]STL之vector容器详解

    vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...

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

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

随机推荐

  1. HDU_1009——老鼠的交易,性价比排序,最大化收益

    Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...

  2. HDU_1016——素环问题DFS

    Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ... ...

  3. IMS 相关名词解释

    IMS: IMS(IP Multimedia Subsystem)是IP多媒体系统,是一种全新的多媒体业务形式,它能够满足现在的终端客户更新颖.更多样化多媒体业务的需求. RCS:Rich Commu ...

  4. P - Atlantis - hdu1542(求面积)

    题意:rt 求面积......不计算重复面积(废话..)hdu1255 的弱化版,应该先做这道题在做那道题的. ******************************************** ...

  5. SWFLoader交互

    主应用程序: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx=& ...

  6. Java基础知识强化49:10个实用的但偏执的Java编程技术

    1. 将String字符串放在最前面 为了防止偶发性的NullPointerException 异常,我们通常将String放置在equals()函数的左边来实现字符串比较,如下代码: // Bad ...

  7. eclipse打包 jar文件,中文乱码解决方案

    直接通过eclipse浏览源代码时,发现中文注释为乱码的问题.其实这个eclipse默认编码造成的问题.可以通过以下方法解决: 修改Eclipse中文本文件的默认编码:windows->Pref ...

  8. CSS3新特性(阴影、动画、渐变、变形、伪元素等) CSS3与页面布局学习总结——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

      目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原点 三.伪元素 3.1.before 3.2.after 3.3.清除浮动 四.圆角与边 ...

  9. Messager( 消息窗口) 组件

    一. 加载方式消息窗口提供了不同的消息框风格,包含 alert(警告框).confirm(确认框).prompt(提示框).progress(进度框)等.所有消息框都是异步的,用户可以在交互消息之后使 ...

  10. 免费SVN源代码在线托管

    免费的SVN源代码在线托管网站很多,用的最多的是TaoCode吧.但是一般都要求开源,支持私有项目的普遍收费,要不就是流量很少,不够用.对比了一下,发现好库正好能满足需要. 网址: http://ww ...