侯捷stl源码剖析注释之18 sgistl33iterator.docx
- 文档编号:12226475
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:33
- 大小:19.41KB
侯捷stl源码剖析注释之18 sgistl33iterator.docx
《侯捷stl源码剖析注释之18 sgistl33iterator.docx》由会员分享,可在线阅读,更多相关《侯捷stl源码剖析注释之18 sgistl33iterator.docx(33页珍藏版)》请在冰豆网上搜索。
侯捷stl源码剖析注释之18sgistl33iterator
SGISTL3.3stl_iterator.h完整列表
/*
*
*Copyright(c)1994
*Hewlett-PackardCompany
*
*Permissiontouse,copy,modify,distributeandsellthissoftware
*anditsdocumentationforanypurposeisherebygrantedwithoutfee,
*providedthattheabovecopyrightnoticeappearinallcopiesand
*thatboththatcopyrightnoticeandthispermissionnoticeappear
*insupportingdocumentation.Hewlett-PackardCompanymakesno
*representationsaboutthesuitabilityofthissoftwareforany
*purpose.Itisprovided"asis"withoutexpressorimpliedwarranty.
*
*
*Copyright(c)1996-1998
*SiliconGraphicsComputerSystems,Inc.
*
*Permissiontouse,copy,modify,distributeandsellthissoftware
*anditsdocumentationforanypurposeisherebygrantedwithoutfee,
*providedthattheabovecopyrightnoticeappearinallcopiesand
*thatboththatcopyrightnoticeandthispermissionnoticeappear
*insupportingdocumentation.SiliconGraphicsmakesno
*representationsaboutthesuitabilityofthissoftwareforany
*purpose.Itisprovided"asis"withoutexpressorimpliedwarranty.
*/
/*NOTE:
Thisisaninternalheaderfile,includedbyotherSTLheaders.
*Youshouldnotattempttouseitdirectly.
*/
#ifndef__SGI_STL_INTERNAL_ITERATOR_H
#define__SGI_STL_INTERNAL_ITERATOR_H
__STL_BEGIN_NAMESPACE
template
classback_insert_iterator{
protected:
_Container*container;
public:
typedef_Containercontainer_type;
typedefoutput_iterator_tagiterator_category;
typedefvoidvalue_type;
typedefvoiddifference_type;
typedefvoidpointer;
typedefvoidreference;
explicitback_insert_iterator(_Container&__x):
container(&__x){}
back_insert_iterator<_Container>&
operator=(consttypename_Container:
:
value_type&__value){
container->push_back(__value);
return*this;
}
back_insert_iterator<_Container>&operator*(){return*this;}
back_insert_iterator<_Container>&operator++(){return*this;}
back_insert_iterator<_Container>&operator++(int){return*this;}
};
#ifndef__STL_CLASS_PARTIAL_SPECIALIZATION
template
inlineoutput_iterator_tag
iterator_category(constback_insert_iterator<_Container>&)
{
returnoutput_iterator_tag();
}
#endif/*__STL_CLASS_PARTIAL_SPECIALIZATION*/
template
inlineback_insert_iterator<_Container>back_inserter(_Container&__x){
returnback_insert_iterator<_Container>(__x);
}
template
classfront_insert_iterator{
protected:
_Container*container;
public:
typedef_Containercontainer_type;
typedefoutput_iterator_tagiterator_category;
typedefvoidvalue_type;
typedefvoiddifference_type;
typedefvoidpointer;
typedefvoidreference;
explicitfront_insert_iterator(_Container&__x):
container(&__x){}
front_insert_iterator<_Container>&
operator=(consttypename_Container:
:
value_type&__value){
container->push_front(__value);
return*this;
}
front_insert_iterator<_Container>&operator*(){return*this;}
front_insert_iterator<_Container>&operator++(){return*this;}
front_insert_iterator<_Container>&operator++(int){return*this;}
};
#ifndef__STL_CLASS_PARTIAL_SPECIALIZATION
template
inlineoutput_iterator_tag
iterator_category(constfront_insert_iterator<_Container>&)
{
returnoutput_iterator_tag();
}
#endif/*__STL_CLASS_PARTIAL_SPECIALIZATION*/
template
inlinefront_insert_iterator<_Container>front_inserter(_Container&__x){
returnfront_insert_iterator<_Container>(__x);
}
template
classinsert_iterator{
protected:
_Container*container;
typename_Container:
:
iteratoriter;
public:
typedef_Containercontainer_type;
typedefoutput_iterator_tagiterator_category;
typedefvoidvalue_type;
typedefvoiddifference_type;
typedefvoidpointer;
typedefvoidreference;
insert_iterator(_Container&__x,typename_Container:
:
iterator__i)
:
container(&__x),iter(__i){}
insert_iterator<_Container>&
operator=(consttypename_Container:
:
value_type&__value){
iter=container->insert(iter,__value);
++iter;
return*this;
}
insert_iterator<_Container>&operator*(){return*this;}
insert_iterator<_Container>&operator++(){return*this;}
insert_iterator<_Container>&operator++(int){return*this;}
};
#ifndef__STL_CLASS_PARTIAL_SPECIALIZATION
template
inlineoutput_iterator_tag
iterator_category(constinsert_iterator<_Container>&)
{
returnoutput_iterator_tag();
}
#endif/*__STL_CLASS_PARTIAL_SPECIALIZATION*/
template
inline
insert_iterator<_Container>inserter(_Container&__x,_Iterator__i)
{
typedeftypename_Container:
:
iterator__iter;
returninsert_iterator<_Container>(__x,__iter(__i));
}
#ifndef__STL_LIMITED_DEFAULT_TEMPLATES
template class_Distance=ptrdiff_t> #else template class_Distance> #endif classreverse_bidirectional_iterator{ typedefreverse_bidirectional_iterator<_BidirectionalIterator,_Tp, _Reference,_Distance>_Self; protected: _BidirectionalIteratorcurrent; public: typedefbidirectional_iterator_tagiterator_category; typedef_Tpvalue_type; typedef_Distancedifference_type; typedef_Tp*pointer; typedef_Referencereference; reverse_bidirectional_iterator(){} explicitreverse_bidirectional_iterator(_BidirectionalIterator__x) : current(__x){} _BidirectionalIteratorbase()const{returncurrent;} _Referenceoperator*()const{ _BidirectionalIterator__tmp=current; return*--__tmp; } #ifndef__SGI_STL_NO_ARROW_OPERATOR pointeroperator->()const{return&(operator*());} #endif/*__SGI_STL_NO_ARROW_OPERATOR*/ _Self&operator++(){ --current; return*this; } _Selfoperator++(int){ _Self__tmp=*this; --current; return__tmp; } _Self&operator--(){ ++current; return*this; } _Selfoperator--(int){ _Self__tmp=*this; ++current; return__tmp; } }; #ifndef__STL_CLASS_PARTIAL_SPECIALIZATION template class_Distance> inlinebidirectional_iterator_tag iterator_category(constreverse_bidirectional_iterator<_BidirectionalIterator, _Tp,_Reference, _Distance>&) { returnbidirectional_iterator_tag(); } template class_Distance> inline_Tp* value_type(constreverse_bidirectional_iterator<_BidirectionalIterator,_Tp, _Reference,_Distance>&) { return(_Tp*)0; } template class_Distance> inline_Distance* distance_type(constreverse_bidirectional_iterator<_BidirectionalIterator, _Tp, _Reference,_Distance>&) { return(_Distance*)0; } #endif/*__STL_CLASS_PARTIAL_SPECIALIZATION*/ template inlinebooloperator==( constreverse_bidirectional_iterator<_BiIter,_Tp,_Ref,_Distance>&__x, constreverse_bidirectional_iterator<_BiIter,_Tp,_Ref,_Distance>&__y) { return__x.base()==__y.base(); } #ifdef__STL_FUNCTION_TMPL_PARTIAL_ORDER template inlinebooloperator! =( constreverse_bidirectional_iterator<_BiIter,_Tp,_Ref,_Distance>&__x, constreverse_bidirectional_iterator<_BiIter,_Tp,_Ref,_Distance>&__y) { return! (__x==__y); } #endif/*__STL_FUNCTION_TMPL_PARTIAL_ORDER*/ #ifdef__STL_CLASS_PARTIAL_SPECIALIZATION //Thisisthenewversionofreverse_iterator,asdefinedinthe //draftC++standard.Itreliesontheiterator_traitstemplate, //whichinturnreliesonpartialspecialization.Theclass //reverse_bidirectional_iteratorisnolongerpartofthedraft //standard,butitisretainedforbackwardcompatibility. template classreverse_iterator { protected: _Iteratorcurrent; public: typedeftypenameiterator_traits<_Iterator>: : iterator_category iterator_category; typedeftypenameiterator_traits<_Iterator>: : value_type value_type; typedeftypenameiterator_traits<_Iterator>: : difference_type difference_type; typedeftypenameiterator_traits<_Iterator>: : pointer pointer; typedeftypenameiterator_traits<_Iterator>: : reference reference; typedef_Iteratoriterator_type; typedefreverse_iterator<_Iterator>_Self; public: reverse_iterator(){} explicitreverse_iterator(iterator_type__x): current(__x){} reverse_iterator(const_Self&__x): current(__x.current){} #ifdef__STL_MEMBER_TEMPLATES template reverse_iterator(constreverse_iterator<_Iter>&__x) : current(__x.base()){} #endif/*__STL_MEMBER_TEMPLATES*/ iterator_typebase()const{returncurrent;} referenceoperator*()const{ _Iterator__tmp=current; return*--__tmp; } #ifndef__SGI_STL_NO_ARROW_OPERATOR pointeroperator->()const{return&(operator*());} #endif/*__SGI_STL_NO_ARROW_OPERATOR*/ _Self&operator++(){ --current; return*this; } _Selfoperator++(int){ _Self__tmp=*this; --current; return__tmp; } _Self&operator--(){ ++current; return*this; } _Selfoperator--(int){ _Self__tmp=*this; ++current; return__tmp; } _Selfoperator+(difference_type__n)const{ return_Self(current-__n); } _Self&operator+=(difference_type__n){ current-=__n; return*this; } _Selfoperator-(difference_type__n)const{ return_Self(current+__n); } _Self&operator-=(difference_type__n){ current+=__n; return*this; } referenceoperator[](difference_type__n)const{ret
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 侯捷stl源码剖析注释之18 sgistl33iterator 侯捷 stl 源码 剖析 注释 18
![提示](https://static.bdocx.com/images/bang_tan.gif)