<STL應用> vector & find_if

看到有人問有個名為C的struct如下

code:

struct C
{
int v1;
int v2;
};

應用在vector中式宣告成vector<C> cv;

如果要搜尋內部元素時該怎麼做?? 
一般解法通常是用for()迴圈作線行搜尋,其實這樣滿直覺也滿簡單的。

這裡提供另一種簡易解法.... 
find_if()的第三個參數提供判斷式的傳入,但是很可惜,只能傳入一個參數。 
而且傳入的是*iterator的型別,而非比對樣本值。

例如這個cv裡的物件的v1,v2依序為 
v1 v2 
1 100 
2 52 
3 25 
4 75 
5 84 
6 33

那我們要找v2=75時的物件該如何做? 
1.functor point

code:

bool Cfind75(const C& obj)
{
return obj.v2==75;
}

2.functor

code:

class Cfind75{
public:
bool operator()(const C& obj)
{
return obj.v2==75;
}
};

可是這樣要比較值就被寫死了啊!! 
沒錯....所以這時候template就派上用場了.... 
所以我們改寫

code:

template<int n>
class CComp{
public:
bool operator()(const C& lhs)
{
return (lhs.v2==n);
}
};

如何使用呢??很簡單....

code:

vector<C>::iterator cviter =
find_if(cv.begin(),cv.end(),CComp<75>());

則cviter就是傳回cv中C型別物件的v2值為75的位置。 
-- 
很簡單的小應用,也沒啥大學問。但是對STL不熟的往往都會忽略。

 #include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
using namespace std;
struct C
{
C():v1(),v2(){}
C(const int& val1,const int& val2):v1(val1),v2(val2){}
C operator()(const int& val1,const int& val2)
{
v1=val1;
v2=val2;
return *this;
}
~C(){}
int v1;
int v2;
};
template<int n>
class CComp{
public:
bool operator()(const C& lhs)
{
return (lhs.v2==n);
}
};
int main(int argc, char *argv[])
{
vector<C> cv;
C val;
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,)); vector<C>::iterator cviter =
find_if(cv.begin(),cv.end(),CComp<>());
cout<<cviter->v1<<" "<<cviter->v2<<endl;
cout<<endl; system("PAUSE");
return ;
}

C++中的vector&find_if的更多相关文章

  1. 【转】java.util.vector中的vector的详细用法

    [转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...

  2. 转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...

  3. STL中的Vector相关用法

    STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...

  4. (转)C++ STL中的vector的内存分配与释放

    C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...

  5. C++STL中的vector的简单实用

    [原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...

  6. STL中的vector实现邻接表

    /* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include  ...

  7. 数据结构与算法(3)- C++ STL与java se中的vector

    声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. 上一篇博客概念性的介绍了vector,我们有了大致 ...

  8. 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)

    之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中.vector A中的结果我们可想而知,可是vector B中的元素还会怎样? 看看之前写过的程序: ...

  9. 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)

    使用vector容器,即避免不了进行查找,所以今天就罗列一些stl的find算法应用于vector中. find() Returns an iterator to the first element ...

随机推荐

  1. 洛谷 P5206: bzoj 5475: LOJ 2983: [WC2019] 数树

    一道技巧性非常强的计数题,历年WC出得最好(同时可能是比较简单)的题目之一. 题目传送门:洛谷P5206. 题意简述: 给定 \(n, y\). 一张图有 \(|V| = n\) 个点.对于两棵树 \ ...

  2. Visual C++中最常用的类与API函数

    这篇文章能让初学者快速了解visual C++ MFC中常见的核心的类与函数,虽然全部看下来有点枯燥,但对初学者快速了解MFC的框架结构很有好处. 常用类 CArchive类:用于二进制保存档案 CB ...

  3. Select查询语句1

    一.语法结构 select[all|distinct]select_list from table_name[join join_condition] where search_condition g ...

  4. hdu 1166 线段树(单点增减 区间求和)

    Sample Input1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Sample Outp ...

  5. js+ajax+springmvc实现无刷新文件上传

    话不多说直接上代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...

  6. 如何删除 Win10此电脑 desktop 视频 图片 文档 下载 音乐等文件夹

    更改注册表; 1. WIN+R   输入[regedit]  打开注册表管理器 2. 找到路径[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curren ...

  7. 归并排序 递归and非递归

    什么是归并排序 归并排序其实就做两件事:  “分解”——将序列每次折半划分. “合并”——将划分后的序列段两两合并后排序.   首先我们来看一下分解是怎样实现的呢?   // 递归退出条件,及left ...

  8. Java 持久化之 -- IO 全面整理(看了绝不后悔)

    目录: 一.java io 概述 什么是IO? IO包括输入流和输出流,输入流指的是将数据以字符或者字节形式读取到内存 分为字符输入流和字符输入流 输入流指的是从内存读取到外界 ,分为字符输入流和字节 ...

  9. 新手通过SVN向eclipse中导入项目注意事项

    该文章进行的前提是,jdk.eclipse.tomcat.maven已安装完成 要从svn上获取项目数据,首先要安装svn 1)通过help->installsoft->svn->a ...

  10. 利用Microsoft Sql Server Management studio 创建数据库的示例

    利用Microsoft Sql Server Management studio 创建数据库的示例方法如下:   一.打开安装好的Microsoft Sql Server Management stu ...