如何设计一个范型算法

// essential  c++
向一个容器(比如 vector)中添加数字后,然后随便输入待比较的数字( int a ;),求找出在vector中比a大的数字,比a小的数字,和a相等的数字,或者是a的3倍,5倍等之类的数字的集合.

//开始看下面的代码之前,你是怎么思考的呢?你是不是觉得直接在里面写个函数比较就是了?或者是其他的呢?

 1#include<iostream>
 2#include <vector>
 3#include <string>
 4using namespace std;
 5/*
 6* 单独写出相关的函数  如 比较,倍数之类的,后面调用 。
 7* 此处仅写了小于和大于函数   其他的依次类推。
 8* 注意参数 与指针函数的匹配
 9*/

10bool less_than(int v1,int v2)
11{
12     return v1<v2?true:false;
13}

14bool greater_than(int v1,int v2)
15{
16     return v1 > v2 ? true:false;
17}

18
19vector<int> filter_ver1(const vector<int> &vec,int filter_value,bool(*pred)(int,int))         
20
21//个人觉得这个函数设置得很好,用到函数指针传递相关的函数。注意相关形参的匹配
22{           
23            vector<int> nvec;
24            for(size_t ix = 0;ix != vec.size(); ++ix)
25                    if(pred(vec [ix],filter_value))            //  调用相关函数进行操作
26                    nvec.push_back(vec[ix]);           //满足结果就保存
27            return nvec;
28}

29int main()
30{   
31    int value;
32    vector<int> ivec; 
33    cout <<"请输入数字:  "<<endl;
34    while(cin >> value)
35    ivec.push_back(value);
36    cin.clear();             //使输入流有效
37    int ival;
38    cout<<"请输入你要比较数字: "<<endl;
39    cin >>ival;
40    vector<int> vec=filter_ver1(ivec,ival ,greater_than);  // 函数的调用  传递函数名即可
41    vector<int>::iterator it=vec.begin();
42    while(it!= vec.end())
43               cout<<*it++<<"  ";
44               cout<<endl;
45
46    system("pause");
47    return 0;
48}

posted on 2009-03-30 23:54 弹杯一笑 阅读(326) 评论(0)  编辑 收藏 引用 所属分类: c++笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(2)

随笔分类(7)

随笔档案(4)

搜索

最新评论

阅读排行榜

评论排行榜