多重集合set 的list实现详解
2010-09-03 21:18
267 查看
#ifndef MINIMULTISET_H
#define MINIMULTISET_H
#include
#include
#include
using namespace std;
template
class miniMultiSet
{
public:
typedef typename list::iterator iterator ;
typedef typename list::const_iterator const_iterator ;
//miniMultiSet的迭代器就是list的迭代器
miniMultiSet() ;
miniMultiSet(T* first , T* last) ;
//多重集,[first , last)
bool empty() const ;
int size() const ;
int count(const T& item) const ;
//返回item在多重集中重复出现的次数
iterator find(const T& item) ;
//指向第一个匹配元素,否则指向end
const_iterator find(const T& item) const ;
pair equal_range(const T& item) ;
pair equal_range(const T& item) const ;
//返回迭代器对 , 使得所有匹配item的元素都在区间[first ,last) ;
iterator insert(const T& item) ;
int erase(const T& item) ;
void erase(iterator pos) ;
void erase(iterator first , iterator last) ;
iterator begin() ;
const_iterator begin() const ;
iterator end() ;
const_iterator end() const ;
private:
list multisetList ;//使用list来实现多重集
int distance(iterator first , iterator last) ;
//返回区间[first, last)内的元素个数
int distance(const_iterator first , const_iterator last) const;
//常量版本
};
template
int miniMultiSet::distance(iterator first , iterator last)
{
int cnt ;
iterator iter = first;
while(iter != last)
{
cnt ++ ;
iter ++ ;
}
return cnt ;
}
template
int miniMultiSet::distance(const_iterator first , const_iterator last) const
{
int cnt ;
iterator iter = first ;
while(iter != last)
{
cnt ++ ;
iter ++ ;
}
return cnt ;
}
template
miniMultiSet::miniMultiSet()
{
}
template
miniMultiSet::miniMultiSet(T* first , T* last)
{
T* tmp = first ;
while(tmp != last)
{
insert(*tmp);
tmp ++ ;
}
}
template
bool miniMultiSet::empty() const
{
return multisetList.empty() ;
}
template
int miniMultiSet::size() const
{
return multisetList.size() ;
}
template
int miniMultiSet::count(const T& item) const
{
int cnt = 0 ;
const_iterator iter ;
pair p ;
p = equal_range(item) ;
if (p.first == end())
{
cnt = 0 ;
}
else
{
iter = p.first ;
while(iter != p.second)
{
cnt ++ ;
iter ++ ;
}
}
return cnt ;
}
template
miniMultiSet::iterator miniMultiSet::find(const T& item)
{
iterator iter = begin() ;
while((iter != end()) && (*iter != item) )
iter ++ ;
return iter ;
}
template
miniMultiSet::const_iterator miniMultiSet::find(const T& item) const
{
const_iterator iter = begin() ;
while((iter != end()) &&(*iter != item) )
iter ++ ;
return iter ;
}
template
pair::iterator , miniMultiSet::iterator > miniMultiSet::equal_range(const T& item)
{
pair p ;
p.first = find(item);
if (p.first == end())
{
p.second = end();
return p ;
}
iterator iter = p.first ;
while((iter != end()) && (*iter == item))
{
iter ++ ;
p.second = iter ;
}
return p ;
}
template
pair::const_iterator , miniMultiSet::const_iterator > miniMultiSet::equal_range(const T& item) const
{
pair p ;
p.first = find(item) ;
if (p.first == end())
{
p.second = end() ;
return p ;
}
const_iterator iter = p.first ;
while((iter != end()) && (*iter == item))
{
iter ++ ;
p.second = iter ;
}
return p ;
}
template
miniMultiSet::iterator miniMultiSet::insert(const T& item)
{
iterator iter ;
iter = find(item);
multisetList.insert(iter,item) ;
iter = find(item) ;
return iter ;
}
template
int miniMultiSet::erase(const T& item)
{
int cnt = 0 ;
iterator iter = find(item) ;
if (iter != end())
{
while((*iter == item) && (iter != end()))
{
multisetList.erase(iter ++ );
cnt ++ ;
}
}
else
cnt = 0 ;
return cnt ;
}
template
void miniMultiSet::erase(iterator pos)
{
multisetList.erase(pos) ;
}
template
void miniMultiSet::erase(iterator first , iterator last)
{
iterator iter = first ;
while(iter != last)
{
multisetList.erase(iter ++ ) ;
}
}
template
miniMultiSet::iterator miniMultiSet::begin()
{
iterator iter = multisetList.begin() ;
return iter ;
}
template
miniMultiSet::const_iterator miniMultiSet::begin() const
{
return multisetList.begin() ;
}
template
miniMultiSet::iterator miniMultiSet::end()
{
return multisetList.end() ;
}
template
miniMultiSet::const_iterator miniMultiSet::end() const
{
return multisetList.end() ;
}
#endif
#define MINIMULTISET_H
#include
#include
#include
using namespace std;
template
class miniMultiSet
{
public:
typedef typename list::iterator iterator ;
typedef typename list::const_iterator const_iterator ;
//miniMultiSet的迭代器就是list的迭代器
miniMultiSet() ;
miniMultiSet(T* first , T* last) ;
//多重集,[first , last)
bool empty() const ;
int size() const ;
int count(const T& item) const ;
//返回item在多重集中重复出现的次数
iterator find(const T& item) ;
//指向第一个匹配元素,否则指向end
const_iterator find(const T& item) const ;
pair equal_range(const T& item) ;
pair equal_range(const T& item) const ;
//返回迭代器对 , 使得所有匹配item的元素都在区间[first ,last) ;
iterator insert(const T& item) ;
int erase(const T& item) ;
void erase(iterator pos) ;
void erase(iterator first , iterator last) ;
iterator begin() ;
const_iterator begin() const ;
iterator end() ;
const_iterator end() const ;
private:
list multisetList ;//使用list来实现多重集
int distance(iterator first , iterator last) ;
//返回区间[first, last)内的元素个数
int distance(const_iterator first , const_iterator last) const;
//常量版本
};
template
int miniMultiSet::distance(iterator first , iterator last)
{
int cnt ;
iterator iter = first;
while(iter != last)
{
cnt ++ ;
iter ++ ;
}
return cnt ;
}
template
int miniMultiSet::distance(const_iterator first , const_iterator last) const
{
int cnt ;
iterator iter = first ;
while(iter != last)
{
cnt ++ ;
iter ++ ;
}
return cnt ;
}
template
miniMultiSet::miniMultiSet()
{
}
template
miniMultiSet::miniMultiSet(T* first , T* last)
{
T* tmp = first ;
while(tmp != last)
{
insert(*tmp);
tmp ++ ;
}
}
template
bool miniMultiSet::empty() const
{
return multisetList.empty() ;
}
template
int miniMultiSet::size() const
{
return multisetList.size() ;
}
template
int miniMultiSet::count(const T& item) const
{
int cnt = 0 ;
const_iterator iter ;
pair p ;
p = equal_range(item) ;
if (p.first == end())
{
cnt = 0 ;
}
else
{
iter = p.first ;
while(iter != p.second)
{
cnt ++ ;
iter ++ ;
}
}
return cnt ;
}
template
miniMultiSet::iterator miniMultiSet::find(const T& item)
{
iterator iter = begin() ;
while((iter != end()) && (*iter != item) )
iter ++ ;
return iter ;
}
template
miniMultiSet::const_iterator miniMultiSet::find(const T& item) const
{
const_iterator iter = begin() ;
while((iter != end()) &&(*iter != item) )
iter ++ ;
return iter ;
}
template
pair::iterator , miniMultiSet::iterator > miniMultiSet::equal_range(const T& item)
{
pair p ;
p.first = find(item);
if (p.first == end())
{
p.second = end();
return p ;
}
iterator iter = p.first ;
while((iter != end()) && (*iter == item))
{
iter ++ ;
p.second = iter ;
}
return p ;
}
template
pair::const_iterator , miniMultiSet::const_iterator > miniMultiSet::equal_range(const T& item) const
{
pair p ;
p.first = find(item) ;
if (p.first == end())
{
p.second = end() ;
return p ;
}
const_iterator iter = p.first ;
while((iter != end()) && (*iter == item))
{
iter ++ ;
p.second = iter ;
}
return p ;
}
template
miniMultiSet::iterator miniMultiSet::insert(const T& item)
{
iterator iter ;
iter = find(item);
multisetList.insert(iter,item) ;
iter = find(item) ;
return iter ;
}
template
int miniMultiSet::erase(const T& item)
{
int cnt = 0 ;
iterator iter = find(item) ;
if (iter != end())
{
while((*iter == item) && (iter != end()))
{
multisetList.erase(iter ++ );
cnt ++ ;
}
}
else
cnt = 0 ;
return cnt ;
}
template
void miniMultiSet::erase(iterator pos)
{
multisetList.erase(pos) ;
}
template
void miniMultiSet::erase(iterator first , iterator last)
{
iterator iter = first ;
while(iter != last)
{
multisetList.erase(iter ++ ) ;
}
}
template
miniMultiSet::iterator miniMultiSet::begin()
{
iterator iter = multisetList.begin() ;
return iter ;
}
template
miniMultiSet::const_iterator miniMultiSet::begin() const
{
return multisetList.begin() ;
}
template
miniMultiSet::iterator miniMultiSet::end()
{
return multisetList.end() ;
}
template
miniMultiSet::const_iterator miniMultiSet::end() const
{
return multisetList.end() ;
}
#endif
相关文章推荐
- 20171231:集合的框架、List集合及其实现类、迭代器的使用、Set集合的一部分内容
- Python 使用list实现简单的集合set
- 【java】java集合list与set、map集合的区别详解
- springmvc接收前台(可以是ajax)传来的数组list,map,set等集合,复杂对象集合等图文详解
- 【java】java集合list与set、map集合的区别、用法详解
- 集合映射(set, list, array,bag, map)详解
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- JAVA三种集合LIST、SET、MAP ——详解
- 集合collection的实现类List,set以及map
- springmvc接收前台(可以是ajax)传来的数组list,map,set等集合,复杂对象集合等图文详解
- java集合LinkedList的底层实现源码详解
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
- 集合工具类之List特点和实现类的详解
- 集合工具类之Set特点和实现类的详解
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- List、Set、Map集合最常用六个子类及它们之间的区别详解(含经典面试题)
- [置顶] springmvc接收前台(如ajax)传来的数组list,set等集合图文详解
- list与set集合详解
- JAVA中集合map,set,list详解
- Set、List、Map三大集合借口的实现类及常用方法