STL中迭代器(Iterator)的简单实现-创新互联
#pragma once
struct InputIteratorTag {};
struct OutputIteratorTag {};
struct ForwardIteratorTag : public InputIteratorTag {};
struct BidirectionalIteratorTag : public ForwardIteratorTag {};
struct RandomAccessIteratorTag : public BidirectionalIteratorTag {};
template
struct InputIterator
{
//typedef T ValueType;
//typedef Distance DifferenceType;
//typedef T* Pointer;
//typedef T& Reference;
typedef InputIteratorTag IteratorCategory; //迭代器的类型 ( 包括上面那5个struct )
};
template
struct IteratorTraits
{
//typedef typename Iterator::ValueType ValueType;
//typedef typename Iterator::DifferenceType DifferenceType;
//typedef typename Iterator::Pointer Pointer;
//typedef typename Iterator::Reference Reference;
typedef typename InputIterator::IteratorCategory IteratorCategory;
};
template
struct IteratorTraits //内置类型的特化版本
{
typedef RandomAccessIteratorTag IteratorCategory;
};
template
inline size_t Distance(InputIterator first, InputIterator last)
{
return _Distance(first, last, IteratorTraits::IteratorCategory() ); //这里第三个参数 并没有实际意义,不过正是它的存在,让_Distance实现重载
}
template
inline size_t _Distance(InputIterator first, InputIterator last, RandomAccessIteratorTag)
{
return last - first;
}
template
inline size_t _Distance(InputIterator first, InputIterator last, InputIteratorTag)
{
size_t n = 0;
while (first != last)
{
++first;
++n;
}
return n;
} 
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻标题:STL中迭代器(Iterator)的简单实现-创新互联
URL网址:http://www.jxjierui.cn/article/gpgps.html


咨询
建站咨询
