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 & a )
{
cout<< a->x <<endl;
}
bool operator()( const FooPtr & a, const FooPtr & 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]