| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 520 人关注过本帖
标题:容器 对象指针 泛型算法
只看楼主 加入收藏
zhongjiezhe
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2011-5-20
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:4 
容器 对象指针 泛型算法
容器中存放的是一些列对象的指针,要对这写对象进行查找,能否直接使用泛型算法find,排序能否直接使用泛型算法sort
搜索更多相关主题的帖子: 算法 
2011-08-01 21:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:1 
以下是引用zhongjiezhe在2011-8-1 21:51:55的发言:

容器中存放的是一些列对象的指针,要对这写对象进行查找,能否直接使用泛型算法find,排序能否直接使用泛型算法sort
1. 使用find_if
程序代码:
#include <algorithm>
#include <iostream>

int main()
{
    int* buf[] = { new int(0), new int(1), new int(2) };

    struct foo {
        foo( int v ) : val(v)
        {
        }
        bool operator()( int* pv ) const
        {
            return *pv==val;
        }

        int val;
    };
    size_t cnt = sizeof(buf)/sizeof(buf[0]);
    int** p = std::find_if( buf+0, buf+cnt, foo(1) );
    if( p != buf+cnt )
    {
        std::cout << **p << std::endl;
    }

    return 0;
}

2. 可以直接用sort
#include <algorithm>
#include <iostream>

int main()
{
    int* buf[] = { new int(2), new int(1), new int(0) };

    struct foo {
        bool operator()( int* a, int* b ) const
        {
            return *a<*b;
        }
    };

    size_t cnt = sizeof(buf)/sizeof(buf[0]);
    std::sort( buf+0, buf+cnt, foo() );
    for( size_t i=0; i<cnt; ++i )
        std::cout << *buf[i] << ' ';
    std::cout << std::endl;

    return 0;
}
2011-08-02 08:23
我是菜鸟C
Rank: 4
等 级:业余侠客
帖 子:74
专家分:200
注 册:2011-3-27
收藏
得分:1 
  排序和查找是可以的。
2011-08-02 12:15
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
这些函数都有重载的形式。像二楼写的,如果你再多传一个参数进去,它们就灵活多了。
2011-08-02 16:32
新手hakan
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2011-8-5
收藏
得分:1 
楼上的是高手啊,说的很在理!
2011-08-05 01:42
快速回复:容器 对象指针 泛型算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014881 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved