STL 查找vector容器中的指定对象:find()与find_if()算法
2013-09-21 13:18
666 查看
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()算法
- STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法
- STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数
- stl 的find_if算法用来查找容器内的符合条件的元素
- STL中vector查找算法find()和find_if()深入比较
- find_if和函数对象结合实现对自定义类型vector的查找
- 用find_if查找vector内对象的成员
- 用find_if查找vector内对象的成员 http://blog.csdn.net/zhongguoren666/article/details/7629610
- 用find_if查找vector内对象的成员
- 【转】用find_if查找vector内对象的成员
- find_if和函数对象结合实现对自定义类型vector的查找 复杂结构体查询某个值
- find_if查找vector内对象的成员 作为菜鸟一直不会用也不敢用
- STL中Vector容器Find的使用(int查找)
- find_if和函数对象结合实现对自定义类型vector的查找
- stl 中list 或者vector正确使用find查找类对象
- stl中的容器、迭代器和算法----vector中的find实现
- 用find_if查找vector内对象的成员
- STL中的find,find_if函数(对类、容器(vector、list)进行查找)
- 使用STL通用算法find_if()在list中搜索对象