qinyi75 发表于 2017-6-2 11:01:03

boost_shared_ptr放入set和vector中

shared_ptr放入set和vector中
#include <vector>
#include <set>
#include <iostream>
#include <algorithm>
#include <boost/shared_ptr.hpp>

using namespace std;
struct Foo{
    Foo(int _x) : x(_x){}
    ~Foo()
    {
      cout<<"~Foo()"<<endl;
    }
    int x;
};
typedef boost::shared_ptr<Foo> FooPtr;

struct FooPtrOps{
    void operator() ( const FooPtr &amp; a )
    {
      cout<< a->x <<endl;
    }
bool operator()( const FooPtr &amp; a, const FooPtr &amp; b )
    { return a->x > b->x; }
};

int main()
{
    vector<FooPtr>foo_vector;
    set<FooPtr, FooPtrOps> foo_set;

    FooPtr foo_ptr(new Foo(2));
    foo_vector.push_back(foo_ptr);
    foo_set.insert(foo_ptr);
   
    foo_ptr.reset(new Foo(1));
    foo_vector.push_back(foo_ptr);
    foo_set.insert(foo_ptr);
   
    foo_ptr.reset(new Foo(3));
    foo_vector.push_back(foo_ptr);
    foo_set.insert(foo_ptr);
   
    foo_ptr.reset(new Foo(2));
    foo_vector.push_back(foo_ptr);
    foo_set.insert(foo_ptr);
   
   
    foo_ptr.reset(new Foo(4));
    foo_vector.push_back(foo_ptr);
    foo_set.insert(foo_ptr);
   
    cout<<"foo_vector"<<endl;
    for_each(foo_vector.begin(), foo_vector.end(), FooPtrOps() );
    cout<<"foo_set"<<endl;
    for_each(foo_set.begin(), foo_set.end(), FooPtrOps() );

    return 0;
}
页: [1]
查看完整版本: boost_shared_ptr放入set和vector中