STL 查找vector容器中的指定对象:find()与find_if()算法
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()算法的更多相关文章
- STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法
1 统计vector向量中指定元素出现的次数:count()算法 利用STL通用算法统计vector向量中某个元素出现的次数:count()算法统计等于某个值的对象的个数. #include &quo ...
- 从vector容器中查找一个子串:search()算法
如果要从vector容器中查找是否存在一个子串序列,就像从一个字符串中查找子串那样,次数find()与find_if()算法就不起作用了,需要采用search()算法:例子: #include &qu ...
- 跟我一起学STL(2)——vector容器详解
一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...
- 带你深入理解STL之Vector容器
C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...
- vector容器中添加和删除元素
添加元素: 方法一: insert() 插入元素到Vector中 iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入 ...
- 如何快速方便的输出向量vector容器中不重复的内容
在vector容器中,存入的内容难免会出现重复,那么如何快速输出或提前非重复的那些数据呢,即重复的数据只输出一次,直观的方法是每次输出都要通过循环比较是否已经输出过,这种方法还是比较费时的,可以利用u ...
- STL之vector容器详解
vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...
- [转]STL之vector容器详解
vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...
- 【C++】STL,vector容器操作
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...
随机推荐
- VS013的单元测试去哪里了
需要安装这个插件 http://visualstudiogallery.msdn.microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7
- [LeetCode] 128. Longest Consecutive Sequence 解题思路
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- HDU-2571命运
Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机 ...
- Solr4.4.0部署到tomcat上
主要步骤如下: 1.下载solr-4.4.0.tgz 2.解压缩solr-4.4.0.tgz,命令tar -xzvf solr-4.4.0.tgz 3.压缩后进入到solr-4.4.0目录,将 exa ...
- IP地址分类及特殊IP地址
A类:0xxx xxxx.x.x.x/8,即1~127,共126个可用. 因0.x.x.x表示所有网络:127.x.x.x/8用作回环地址,作为测试TCP/IP协议的地址. =>其中10.x.x ...
- Thinkphp中distinct的用法
Thinkphp中distincat的用法 TP中distinct()的用处主要是去除重复的值 在Thinkphp手册中也详细说明了(链接:http://document.thinkphp.cn/ma ...
- iOS-网络编程(二)文件上传和断点离线下载
一. iOS中发送HTTP请求的方案 在iOS中,我们常用发送HTTP请求的方案有苹果原生(自带)NSURLConnection:用法简单,最古老最经典最直接的一种方案 (iOS 9.0弃用)NSUR ...
- 关于phpmyadmin中添加外键的做法
今天想加个外键,又不想用命令行,打开PHPMYADMIN看怎么弄,找了半天没有找到添加外键的地方,然后上网搜了一会,发现目前的PHPMYADMIN确实没有这个设置,所以只能手动命令行添加了. 语法 ...
- [iOS]使用symbolicatecrash分析crash文件
对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug.一周前我刚经历过,而且最坑的是由于第一次做个人开发,经验不足,没有集成友盟的分析SDK,还 ...
- oracle nvl()函数在使用中出现的问题
看一条sql select q.*, r.goods_name from (select nvl(t.goods_code, s.goods_code) goods_code, t.buy_open_ ...