目标:实现一个通用的容器,能够支持插入多种不同的普通类型(包含 int char float double 等)和自定义结构体和自定义类的对象,并能根据每种不同类型的比较规则从容器中取得最大或最小的那个值或对象
方案:使用自定义的模板,默认使用set容器,也可指定为其他容器
[代码] myContainer.hpp
#ifndef _MYCONTAINER_
#define _MYCONTAINER_
#include <set>
#include <iostream>
template <class _Ty,
class _Container = set<_Ty>>
class MyContainer {
public:
typedef MyContainer<_Ty, _Container> _MyCon;
typedef typename _Container::size_type size_type;
typedef typename _Container::value_type value_type;
MyContainer() :container() {
//无参构造函数,初始化内置容器
}
MyContainer(const _MyCon &right) :container(right.container) {
//拷贝构造函数,用另一个对象的内置容器赋给当前对象的内置容器
}
_MyCon &operator= (const _MyCon &other) {
container = other.container;
return *this;
}
size_type size() {
return container.size();
}
bool empty() {
return container.empty();
}
bool insert(const value_type &_Val) {
typename _Container::iterator it = container.insert(_Val);
if (it != container.end()) {
std::cout << "插入成功" << _Val << std::endl;
return true;
}
std::cout << "插入失败" << _Val << std::endl;
return false;
}
bool erase(const value_type &_Val) {
if (container.erase(_Val) > 0) {
return true;
}
return false;
}
std::pair<value_type, bool> getMin() {
std::pair<value_type, bool> ret;
if (container.begin() != container.end()) {
ret.second = true;
ret.first = *(container.begin());
return ret;
}
ret.second = false;
return ret;
}
std::pair<value_type, bool> getMax() {
std::pair<value_type, bool> ret;
if (container.begin() != container.end()) {
ret.second = true;
ret.first = *(--container.end());
return ret;
}
ret.second = false;
return ret;
}
protected:
_Container container; //内置容器
};
#endif
[代码] main.cpp
#include <iostream>
#include "myContainer.hpp"
#include <set>
#include <map>
using namespace std;
int main(void) {
// MyContainer<int> mc;
MyContainer<int, multiset<int>> mc;
for (int i = 0; i < 5; i++) {
mc.insert(i * 10);
}
mc.erase(0);
mc.erase(40);
cout << "最大的值:" << mc.getMax().first << endl;
cout << "最小的值:" << mc.getMin().first << endl;
if (!mc.empty()) {
cout << "元素个数: " << mc.size() << endl;
}
return 0;
}