Chinaunix首页 | 论坛 | 博客
  • 博客访问: 232455
  • 博文数量: 46
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 620
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-12 18:04
文章分类

全部博文(46)

文章存档

2010年(7)

2009年(39)

我的朋友

分类: C/C++

2010-01-08 17:46:15

一个简单的list容器元素批量删除的例子


#include <list>
#include <algorithm>
#include <iostream>
using namespace std;
#include <time.h>
    //embed type def
    struct warn_node
    {
        //! id
        int     gid;
        
        //! value
        int     current;
        
        //! warn time
        time_t    warn_time;
    };
    
    //!    functor for warn_node timeout
    class warn_node_timeout
    {
    public:
        warn_node_timeout(time_t timeout):m_timeout(timeout)
        {}
        
        bool operator()(struct warn_node elem)
        {
            if(elem.warn_time < m_timeout) return true;
            return false;
        }
    private:
        time_t m_timeout;
    };
    

int main()
{
    list<struct warn_node> warn;
    
    time_t timeout;
    for(int i = 0; i < 10; i++)
    {
            struct warn_node nd;
            nd.gid = i;
            nd.current = i*2;
            nd.warn_time = time(0);
            warn.push_back(nd);
            if(i == 4) timeout = time(0);
            sleep(1);
    }
    
    warn.erase(remove_if(warn.begin(), warn.end(),                          warn_node_timeout(timeout)),
                             warn.end());    
                
    list<struct warn_node>::iterator it;                    
     for(it = warn.begin(); it != warn.end(); it++)
     {
             cout<<it->gid<<" "<<it->current<<endl;
     }
    
    return 0;
    
}        


阅读(1469) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~