// dd.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <vector> #include <algorithm> #include <functional> #include <iostream> namespace WX { //默认数据没有重复 template<typename D> class CWXMemData : public std::vector<D> { public: //添加一个数据 void Add(D& data) { this->push_back(data); } //有则删除一个数据 void Delete(D& data) { this->erase(data); } //有则修改一个数据 template<class _Pr> inline void Edit(D& data, _Pr _Pred) { std::vector<D>::iterator pos = std::find_if(this->begin(), this->end(), _Pred); if(pos!=this->end()) { *pos = data; } } }; } //数据 class CData { public: CData():m_n(0) { } CData(int data) { this->m_n = data ; } CData(const CData& data) { this->m_n=data.m_n; } CData* operator=(const CData& data) { this->m_n = data.m_n; return this; } bool operator==(const CData& data) { return this->m_n == data.m_n; } int m_n; }; //编辑时比较函数 bool vvv(CData v, CData n) { if(n.m_n==v.m_n) { return true; } return false; } int _tmain(int argc, _TCHAR* argv[]) { WX::CWXMemData<CData> m; m.Add(CData(1)); m.Add(CData(2)); m.Add(CData(3)); CData n(4); m.Edit(n, std::bind2nd(std::ptr_fun(vvv), CData(4))); for(int i=0; i<m.size(); i++) std::cout<< m.at(i).m_n << std::endl; std::cout<<"....." << std::endl; m.Edit(n, std::bind2nd(std::ptr_fun(vvv), CData(2))); for(int i=0; i<m.size(); i++) std::cout<< m.at(i).m_n << std::endl; std::cout<<"....." << std::endl; return 0; }