64,281
社区成员
发帖
与我相关
我的任务
分享
#include<vector>
#include<algorithm>
#include"boost/scoped_ptr.hpp"
using namespace std;
using namespace boost;
typedef scoped_ptr<int> intPointer;
bool mf(intPointer p1,intPointer p2){
return *p1<*p2;
}
int main (int argc,char** argv) {
vector<intPointer> v;
vector<intPointer>::iterator it;
intPointer i1(new int(3));
intPointer i2(new int(1));
intPointer i3(new int(2));
v.push_back(i1);
v.push_back(i2);
v.push_back(i3);
sort(v.begin(),v.end(),mf);
for(it=v.begin();it!=v.end();it++){
cout<<**it;
}
system("pause");
return 0;
}
#include<iostream>
#include<vector>
#include<algorithm>
#include"c++template\smartptr.h"
using namespace std;
typedef SmartPtr<int> intPointer;
bool mf(intPointer p1,intPointer p2){
return *p1<*p2;
}
int main (int argc,char** argv) {
vector<intPointer> v;
vector<intPointer>::iterator it;
intPointer i1(new int(3));
intPointer i2(new int(1));
intPointer i3(new int(2));
v.push_back(i1);
v.push_back(i2);
v.push_back(i3);
sort(v.begin(),v.end(),mf);
for(it=v.begin();it!=v.end();it++){
cout<<**it;
}
system("pause");
return 0;
}
// SmartPtr
template<class T>
class SmartPtr
{
public:
SmartPtr(T* src):ptr(src),pCnt(new int(1))
{
}
SmartPtr(const SmartPtr<T>& src):ptr(src.ptr),pCnt(src.pCnt)
{
++(*pCnt);
}
SmartPtr<T>& operator=(const SmartPtr<T>& rhs)
{
if(ptr != rhs.ptr)
{
Release();
ptr = rhs.ptr;
pCnt = rhs.pCnt;
++*pCnt;
}
return (*this);
}
T* operator->()
{
return ptr;
}
const T* operator->()const
{
return ptr;
}
T& operator*()
{
return (*ptr);
}
const T& operator*()const
{
return (*ptr);
}
~SmartPtr()
{
Release();
}
private:
T* ptr;
int *pCnt;
void Release()
{
if(--*pCnt == 0)
{
delete ptr;
delete pCnt;
}
}
};
#include <algorithm>
#include <iostream>
#include <memory>
#include <vector>
typedef std::shared_ptr<int> int_ptr;
int main (int,char**)
{
std::vector<int_ptr> v
{
int_ptr{new int (3)},
int_ptr{new int (2)},
int_ptr{new int (1)},
};
std::sort(v.begin(),v.end(),[](int_ptr const& p1, int_ptr const& p2){return *p1<*p2;});
for(auto const& x : v){ std::cout << *x; }
std::cout << std::endl;
return 0;
}