??xml version="1.0" encoding="utf-8" standalone="yes"?> 本节介绍三种UdPTZ单元操作Q绝寏V相Ҏ(gu)Ud。所有操作都需要profile tokenQ引用PTZ配置中的Media Profile?br /> 所有移动命令应以非d方式执行Q表CZ应等到请求的Ud操作完成。新的移动请求可以覆盖最后的Ud操作?/p> ׃本规范涉?qing)的物理讑֤范围q泛Q因此本规范不要求对PTZUd操作的特定相应时间。但是设备应量减少PTZUd命o(h)响应的gq。设备没有完全控制PTZ控制输入和设备移动的滞后。网l与客户端的延迟?x)增加滞后。实现应该尽快减设备的延迟?/p> 5.3.1. l对UdQAbsoluteMoveQ?br /> 如果PTZ节点支持l对水^/俯Ԓ或绝对变焦的UdQ则应支持绝对移动操作。这个命令的位置参数指定PTZ单元要移动的l对位置。它分ؓ(f)一个可选的水^/俯Ԓ元素和一个可选的变焦元素。如果忽略了水^/俯Ԓ位置Q则当前的水q?俯Ԓq动不受此命令的影响。变焦也是同L(fng)原理?/p> PTZ节点支持的绝对位|空_(d)如果省略了空间信息,则PTZ配置的相应的默认I间Q采用指定控件的媒体属性。设备仅为有l对位置I间提供支持l对水^/俯Ԓ或变焦的服务。现有的Ud操作命o(h)中的速度参数比PTZ配置中的默认速度优先U要高。如果空间引用了速度参数Q那么需要支持PTZ节点支持的速度I间?/p> 如果无法辑ֈ所要求的绝对位|,操作失败?/p> hQREQUESTQ? 如果PTZ节点支持相对水^/俯Ԓ或相对变焦移动,则需要支持相对移动(RelativeMoveQ操作。此操作的{换参数指定当前位|与要移动的位置的插倹{该操作可分Z个可选的水^/俯Ԓ元素和一个可选的变焦参数。如果水q?俯Ԓ忽略掉了Q那么当前的水^/俯Ԓ位置不会(x)受此命o(h)的媄(jing)响。变焦元素也同样?br /> 转换元素中引用的I间应该为PTZ节点支持的{换空间。如果{换参数的I间信息忽略掉了Q那么将Ҏ(gu)PTZ配置的默认空间。设备需要支持相Ҏ(gu)q?俯ԒUdQ相对变焦移动或不支持相对运动?br /> 在请求移动的命o(h)中携带的速度参数优先于PTZ配置中的默认速度。如果空间引用了速度参数Q则PTZ节点需要支持速度I间?br /> 通过发送水q?俯Ԓ和变?值命令可以在当前位置停止PTZ单元。停止应h与引用相对空间完全相同的效果?br /> 如果h转换后的l对位置是无法到辄Q那么PTZ节点需要移动最接近的有效位|?br />hQREQUESTQ? hPTZ功能的设备应支持q箋Ud。此命o(h)的速度参数为水q?俯Ԓ和羃放指定的有符L(fng)速度倹{组合的水^/俯Ԓ元素?qing)变焦元素也是可选的。如果水q?俯Ԓ元素忽略掉了Q当前的水^/俯Ԓ元素则不受此命o(h)的媄(jing)响。变焦元素也是如此。引用有速度元素的空间的PTZ节点需要支持速度I间。如果速度参数忽略掉了I间信息Q那么采用相应的指定媒体文g的PTZ配置的默认空间。设备通过仅ؓ(f)支持的情冉|供速度I间来支持连l水q?俯ԒUd和连l变焦动作?br /> 当前Ud操作的超时参C先于相应PTZ配置的默认超时参数。超时参数决定PTZ节点的连l移动的旉?br /> ?作ؓ(f)该u的连l移动参数时Q设备应停止在特定uQ水qI俯Ԓ或变焦)的移动。引用的速度I间也应有独立的停止功能。这个命令在q箋Ud的媄(jing)响与?.3.5节中的停止命令是一L(fng)?br /> h的速度得到的绝对位|是不能到达的,则PTZ节点应移动到最接近的能到达的位|。连l移动操作的典型应用是通过操纵杆控制PTZ?br />hQREQUESTQ? 讑֤有GeoMove信号Q则PTZ节点需要支持这cd令?br /> 可选的AreaHeight和AreaWidth参数可以d到参CQ所以PTZ讑֤可以军_变焦因子。如果没有提供AreaHeight和AreaWidthQ该单元?yu)不会(x)更改变焦。AreaHeight和AreaWidth用米来表C?br /> h的{换过E中的速度参数优先于相应的PTZ配置的默认速度。如果引用的I间含有速度参数Q那么PTZ节点应支持速度I间?br /> 如果PTZ讑֤不支持自动检索地理位|,那么在执行地理引用命令之前用SetGeoLocationq行讄。客L(fng)如果在设备设|地理位|之前发送GeoMove命o(h)Q设备应q回一个错误?br /> 取决于PTZ讑֤的运动方式,h的位|可能无法到达。这U情况下讑֤应返回一个错误,表示׃物理限制无法执行h的操作?br />hQREQUESTQ? 响应QRESPONSEQ?/strong>: I消?br />错误QF(tun)AULTSQ?/strong>Q?br />• env:Sender - ter:InvalidArgVal - ter:NoProfile PTZ讑֤需支持停止操作。如果没有指定停止的参数Q那么这个命令将停止所有正在进行的水^Q俯仰和变焦动作。通过指定相应的停止参数可以停止对应的操作?br />hQREQUESTQ? 讑֤PTZ节点有MoveAndTrack时应该支持这个命令。这个操作的目的是向讑֤发送一个自动命令:(x)Ud摄像机到惌的位|然后通过q踪法代理PTZ操作。用原子命令,延迟被最化。移动位|是可选的且可以按照三U模式进行设|:(x) PTZ讑֤需支持通过GetStatus命o(h)报告PTZ状态。PTZ状态包含以下信息:(x)
• ProfileToken [tt:ReferenceToken]
对现有媒体配|文件的引用
• Position [tt:PTZVector]
指定l对目标位置的矢?br />• Speed – 可选[tt:PTZSpeed]
可选速度矢量
响应QRESPONSEQ?/strong>: I消?br />错误QF(tun)AULTSQ?/strong>Q?br />• env:Sender - ter:InvalidArgVal - ter:NoProfile
h的配|文件token内ProfileToken不存在?br />• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
h的配|文件token未引用PTZ配置?br />• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的I间?br />• env:Sender - ter:InvalidArgVal - ter:InvalidPosition
h的位|超Z界限?br />• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
h的速度出了界限?br />讉K权限c(ACCESS CLASSQ?/strong>Q?br />ACTUATE5.3.2. 相对UdQRelativeMoveQ?br />
• ProfileToken [tt:ReferenceToken]
对现有媒体配|文件的引用
• Translation [tt:PTZVector]
指定相对于当前位|的位置q移的向?br />• Speed – 可选[tt:PTZSpeed]
可选速度矢量
响应QRESPONSEQ?/strong>: I消?br />错误QF(tun)AULTSQ?/strong>Q?br />• env:Sender - ter:InvalidArgVal - ter:NoProfile
h的配|文件token内ProfileToken不存在?br />• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
h的配|文件token未引用PTZ配置?br />• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的I间?br />• env:Sender - ter:InvalidArgVal - ter:InvalidTranslation
h的{换超Z界限?br />• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
h的速度出了界限?br />讉K权限c(ACCESS CLASSQ?/strong>Q?br />ACTUATE5.3.3. q箋UdQContinuousMoveQ?br />
• ProfileToken [tt:ReferenceToken]
对现有媒体配|文件的引用
• Velocity [tt:PTZSpeed]
速度矢量指定水^Q俯仰和变焦的速度?br />• Timeout– 可选[tt:duration]
可选超?br />响应QRESPONSEQ?/strong>: I消?br />错误QF(tun)AULTSQ?/strong>Q?br />• env:Sender - ter:InvalidArgVal - ter:NoProfile
h的配|文件token内ProfileToken不存在?br />• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
h的配|文件token未引用PTZ配置?br />• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的I间?br />• env:Sender - ter:InvalidArgVal - ter:InvalidTranslation
h的{换超Z界限?br />• env:Sender - ter:InvalidArgVal - ter:TimeoutNotSupported
指定的超时参C在支持的时旉范围内?br />• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
h的速度出了界限?br />讉K权限c(ACCESS CLASSQ?/strong>Q?br />ACTUATE5.3.4. 地理UdQGeoMoveQ?br />
• ProfileToken [tt:ReferenceToken]
对现有媒体配|文件的引用
• Target [tt:GeoLocation]
目标坐标?br />• Speed – 可选[tt:PTZSpeed]
指定水^Q俯仰和变焦的速度矢量?br />• AreaWidth – 可选[xs:float]
要显C的可选区域?br />• AreaHeight – 可选[xs:float]
要显C的可选区域?br />
h的配|文件token内ProfileToken不存在?br />• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
h的配|文件token未引用PTZ配置?br />• env:Sender - ter:InvalidArgVal - ter:GeoMoveNotSupported
讑֤不支持地理移动?br />• env:Sender - ter:InvalidArgVal - ter:UnreachablePosition
h的{换超Z界限?br />• env:Sender - ter:InvalidArgVal - ter:TimeoutNotSupported
指定的超时参C在支持的时旉范围内?br />• env:Sender - ter:InvalidArgVal - ter:GeoLocationUnknown
׃地理位置未配|或不可用,该单元无法执行GeoMove?br />讉K权限c(ACCESS CLASSQ?/strong>Q?br />ACTUATE5.3.5. 停止QStopQ?br />
• ProfileToken [tt:ReferenceToken]
对现有媒体配|文件的引用
• PanTilt – 可选[xs:boolean]
停止水^和俯仰操作(默认为trueQ?br />• Zoom – 可选[xs:boolean]
停止变焦操作Q默认ؓ(f)trueQ?br />响应QRESPONSEQ? I消?br />错误QF(tun)AULTSQ?/strong>Q?br />• env:Sender - ter:InvalidArgVal - ter:NoProfile
h的配|文件token内ProfileToken不存在?br />• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
h的配|文件token未引用PTZ配置?br />讉K权限c(ACCESS CLASSQ?/strong>Q?br />ACTUATE5.3.6. Udq开始跟t(MoveAndStartTrackingQ?br />
• 通过地理位置坐标
• 通过预置位token
• 通过PTZVector位置
h位置Ud的的速度参数优先于相应的PTZ配置的默认速度。如果引用空间含有速度参数Q那么PTZ节点需支持速度I间?br /> 如果在同一个设备中完成了侦察和q踪Q那么ObjectID引用可以作ؓ(f)参数Q以指定应跟t哪个对象?br /> h的绝对位|设备无法到达,则操作将p|?br />hQREQUESTQ?
• ProfileToken [tt:ReferenceToken]
对现有媒体配|文件的引用
• GeoLocation – 可?[tt:GeoLocation]
可选目标坐标?br />• PresetToken – 可选[tt:ReferenceToken]
对一个存在的预置位token的可选应用?br />• TargetPosition – 可选[tt:PTZVector]
指定l对目标位置的可选向量?br />• Speed – 可选[tt:PTZSpeed]
可选速度矢量?br />• ObjectID – 可选[tt:ObjectID]
要跟t对象的可选Object ID?br />响应QRESPONSEQ?/strong>: I消?br />错误QF(tun)AULTSQ?/strong>Q?br />• env:Sender - ter:InvalidArgVal - ter:NoProfile
h的配|文件token内ProfileToken不存在?br />• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
h的配|文件token未引用PTZ配置?br />• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的I间?br />• env:Sender - ter:InvalidArgVal - ter:InvalidPosition
h的位|超Z界限?br />• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
h的速度出了界限?br />• env:Sender - ter:InvalidArgVal - ter:GeoMoveNotSupported
讑֤不支持地理移动?br />• env:Sender - ter:InvalidArgVal - ter:UnreachablePosition
h的{换超Z界限?br />• env:Sender - ter:InvalidArgVal - ter:GeoLocationUnknown
׃地理位置未配|或不可用,该单元无法执行GeoMove?br />• env:Sender - ter:InvalidArgVal - ter:NoToken
h的预|位token不存在?br />讉K权限c(ACCESS CLASSQ?/strong>Q?br />ACTUATE5.3.7. 状态获取(GetStatusQ?br />
• 位置Position (可? – 引用I间指定云台单元的绝对位|。相应PTZ配置的默认绝对空间应在位|元素中引用。如果设备有StatusPosition能力Q则需要显C此信息?br />• Ud状态MoveStatus(可? – 表示水^/俯Ԓ/变焦讑֤单元当前是否正在Ud、空闲或处于位置状态。如果设备有MoveStatus能力Q则需要显C此信息。未知状态不应在正常错误中用,但是在初始化或错误状况下使用?br />• 错误Error (可? – 表示当前PTZ错误状态。MoveStatus未知状态时Q显C个字Dc(din)?br />• 国际标准旉 UTC Time – 指定生成状态时的UTC旉?br />hQREQUESTQ?/strong>:
• ProfileToken [tt:ReferenceToken]
对现有媒体配|文件的引用
响应QRESPONSEQ?/strong>: I消?br />• PTZStatus[tt:PTZStatus]
h媒体文g的PTZStatus?br />错误QF(tun)AULTSQ?/strong>Q?br />• env:Sender - ter:InvalidArgVal - ter:NoProfile
h的配|文件token内ProfileToken不存在?br />• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
h的配|文件token未引用PTZ配置?br />• env:Receiver – ter:Action - ter:NoStatus
h的媒体配|文件中没有可用的PTZ状态?br />讉K权限c(ACCESS CLASSQ?/strong>Q?br /> READ_MEDIA
]]>
]]>
]]>
容器
cȝQ容?br />
描述
随机讉K容器是一个P代器cd为随问P代器?a target="_blank" href="http://www.shnenglu.com/chinapeter2008/archive/2012/03/21/168512.html">可逆容?/a>。它提供帔R~冲旉来访问随机元素?br />
改善?/strong>
可逆容?/a>
相关cd
除了定义?a target="_blank" href="http://www.shnenglu.com/chinapeter2008/archive/2012/03/21/168512.html">可逆容?/a>中的cdQ没有其他额外类型。尽这个P代器cd的需求加ZQ必L随机讉Kq代器?br />
标记?/strong>
X 随机讉K容器模型cd
a,b Xcd对象
T Xcd的?br />
定义
有效表达?/strong>
除了定义?a target="_blank" href="http://www.shnenglu.com/chinapeter2008/archive/2012/03/21/168512.html">可逆容?/a>中的表达式外Q下面的表达式也必须有效?br />名称 表达?nbsp; cd需?nbsp; q回cd
Element accessQ访问元素) a[n] n可以转换成size_type 如果可变Q那么是引用Q否则ؓ(f)帔R引用
表达式语?/strong>
一个表辑ּ的语义只在这个情况下定义Q当他在可逆容?/a>中没有定义,或者有额外的信息?br />名称 表达?nbsp; 前提 语义 后置
Element access(讉K元素) a[n] 0<=n<a.size() q回容器的第n个元?br />
复杂度保?/strong>
讉K元素的运行时复杂度ؓ(f)~冲帔R旉?br />
不变?/strong>
Element access(讉K元素) a[n]q回的元素与增加a.begin()nơ得到的l果q代器解引用是一L(fng)?br />
模型
vector
deque
注释
参见
Iterator overview,随机讉Kq代?Sequence
]]>
cȝQ容?/strong>
描述
可逆容器是一个有双向q代器的前向容器。它可以向后向后q代通过容器?br />
改善?/strong>
Forward Container
相关cd
介绍了两个新的类型。此外,q代器类型和帔Rq代器类型必Lx前向容器(Forward Container)更严格的要求。P代器cd和反向P代器cd必须是双向P代器(Bidirectional Iterators)Q而不仅仅是前向P代器(ForWard Iterators)?br />
反向q代器类?Reverse iterator type) X::reverse_iterator 一个反向P代器适配器的P代器cd是容器的q代器类型。递增反向q代?rever_iterator)cd对象向后Ud通过容器QReverse Iterator适配器映了++操作W和--操作W?br />帔R反向q代器类?Const reverse iterator type) X::const_reverse_iterator 一个反向P代器适配器的P代器是容器的帔Rq代器类型。[1]
标记?/strong>
X 反向容器模式cd
a,b cdX对象
定义
有效表达?/strong>
除了前向容器(Forward Container)中的表达式外Q下面的表达式也必须有效
名称 表达?nbsp; cd要求 q回cd
范围起始Beginning of range a.rbegin() 如果a是可变的Q那么是reverse_iterator,否则为const_reverse_iterator[1]
范围l束End of range a.rend() 如果a是可变的Q那么是reverse_iteratorQ否则ؓ(f)const_reverse_iterator[1]
表达式语?/strong>
一个表辑ּ的语义只有在q种情况下定义,当它没有在前向容?Forward Container)中定义,或者有额外的信息?br />名称 表达?前提 语义 后置
逆向范围起始Beginning of range a.rbegin() 相当于X::reverse_iterator(a.end())?a.rbegin()是提领或者是past-the-end。当a.size() == 0是,它ؓ(f)past-the-end?br />逆向范围l束End of reverse range a.rend() 相当于X::reverse_iterator(a.begin())?a.rend()是past-the-end?br />
复杂性保?/strong>
rbegin()和rend()q行时复杂性是摊销旉为常数?br />
不变因素
有效范围 [a.rbegin(), a.rend())是一个有效范围?br />{待范围 a.begin()到a.end()之间的距da.rbegin()到a.rend()之间的距L一L(fng)?br />
模型
vector
list
deque
注释
[1]一个容器的q代器类型和帔Rq代器类型有可能是相同的cdQ一个容器不需要提供可变的q代器。因此反向P代器cd和常量反向P代器cd也可能是相同的?br />
参见
Iterator overview, Bidirectional Iterator, Sequence
]]>
容器
cȝQ容?br />
描述
前向容器中的元素是按一定的序排序的:(x)q个序不会(x)因ؓ(f)q代而自动改变。一定的序要求允许定义相等的元素(如果容器中的元素是可以比较相{的Equality ComparableQ和字典序(如果容器中的元素cd是可以比较小于的 LessThen ComparableQ?br />
前向容器中的q代器满_向P代器的要求:(x)因此Q前向容器支持多通道法Qƈ允许同一个容器可以同时拥有多个激zȝq代器?br />
完善(Refinement of)
Container,EqualityComparable,LessThanComparable
相关cd
除了容器d义的Q没有其他额外的cd。然而,q代器类型的要求加强QP代器cd必须是前向P代器模式?br />
标记?/strong>
X 是一个前向容器模式的cd
a,b cdX的对?br />T cdX的?br />
定义
有效表达?/strong>
除了容器中定义的表达式外,EqualityComparable,和LessThanComparableQ下面的表达式必L有效的?br />名字 表达?nbsp; cd要求 q回cd
{式(Equality) a == b T是EqualityComparable 可{换成bool
不等?Inequality) a != b T是EqualityComparable 可{换成bool
于(Less) a < b T是LessThanComparable 可{换成bool
大于(Greater) a > b T是LessThanComparable 可{换成bool
于或等?Less or equal) a <= b T是LessThanComparable 可{换成bool
大于或等?Greater or equal)a >= b T是LessThanComparable 可{换成bool
表达式语?/strong>
一个表辑ּ的语义只有在q种情况下定义,当它没有定义在Container, EqualityComparable, 或者LessThanComparableQ或者有额外的信息?br />名字 表达?nbsp; 前提 语义 后置
{式(Equality) a == b 如果a.size() == b.size()而且a中的每个元素都等于b中的对应的元素,那么q回true。否则返回false?br />于(Less) a < b 相当于lexicographical_compare(a,b)
复杂性担?/strong>
{式和不{式的操作与容器的大呈U性关pR?br />
不变
序 两个不同的P代器q代一个前向容器的Q都是以同样的顺序访问它的元素,提供一个没有干预性的操作?br />
模型
vector
list
slist
deque
set
hash_set
map
hash_map
multiset
hash_multiset
multimap
hash_multimap
注释
参见
iterator overview, Forward Iterator, Sequence
]]>容器
cȝQ容?br />描述
容器是一个可以存储对象(它的元素Q,q具有访问其元素的方法的一个对象。特别是Q每一个容器模式类型都有一个关联的q代器类型来遍历容器中的元素?br />
不能保证容器中的元素按特定的方式来存储;事实上,不同的是每次q代器是如何通过容器的。也不能保证容器的多个P代器是一直有效的。(特定的容器类型,像前向容器是提供q样的保证的。)
容器“拥有”它的元素Q存储在一个容器中的元素的寿命不能过容器本n。[1]完善
Assignable相关cd
(Value type)值类?nbsp; X::value_type 存储在容器中的对象类型。值类型必LAssignableQ但不必是DefaultConstructible.[2]
(Iterator type)q代器类?X::iterator q代器类型用来遍历容器的元素。P代器的值类型就是容器的值类型。必d以从iterator type转换成const iterator type。P代器的类型必L一个输入P代器。[3]
(Const iterator type)帔Rq代器类?X::const_iterator 是一个可以查看但不能修改容器中元素的q代器类型。[3][4]
(Reference type)引用cd X::reference 是一个行为像容器值类型引用的cd。[5]
(Const reference type)帔R引用cd X::const_reference 是一个行为像容器值类型常量引用的cd。[5]
(Pointer type)指针cd X::pointer 是一个行为像容器值类型指针的cd。[6]
(Distance type)距离cd X::distance_type 一个有W号整数cd来表CZ个容器P代器之间的距R此cd必须跟P代器之间的距ȝ型是一L(fng)。[2]
(Size type)大小cd X::size_type 一个无W号整数cd来表CZQ何非负值的容器距离cd。[2]标记?/h3>
X 容器模式对象
a,b Xcd对象
T Xcd的?br />定义
容器?size)大小是它所包含的元素个敎ͼ它是一个非负数?br />
容器?area)面积是它占用的字节数。更切地说Q它是元素的面积的d加上与容器本w相关的M开销。如果容器的值类型T是一个简单的cdQ而不是一个容器类型)Q那么这个容器的面积是sizeof(T)的常数倍。也是_(d)一个简单值类型的容器a的面U是O(a.size())?br />
一?variable sized)可变大小的容器提供插入和/或移除元素的Ҏ(gu)Q容器大可能会(x)变化。一?fixed size)固定大小的容器,它的大小在它的生命周期内是一只不变的。一些固定大的容器cdQ大在~译时确定?br />有效表达?/h3>
除了Assignable,EqualityComparable,和LessThanComparableq些已经定义的表辑ּQ下面的表达式也必须是有效的?br />
名称 表达?nbsp; cd要求 q回cd
范围起始 a.begin() 如果是可变的Q返回gؓ(f)iterator(q代?Q否则ؓ(f)const_iterator[4][7]
范围l束 a.end() 如果是可变的Q返回gؓ(f)iterator(q代?Q否则ؓ(f)const_iterator[4]
大小 a.size() size_type
最大容?nbsp; a.max_size() size_type
I容?nbsp; a.empty() 可{换成boolcd
交换 a.swap(b) void表达式语?/h3>
名称 表达?nbsp; 前提 语义 后置
拯构造函?nbsp; X(a) X().size() == a.size()。X()包含了a中所有元素的副本?br />拯构造函?nbsp; X b(a) b().size() == a.size()。b包含了a中所有元素的副本?br />赋D符 b = a b().size() == a.size()。b包含了a中所有元素的副本?br />析构函数 a.~X() 销毁a中所有的元素Qƈ释放为它们分配的内存Q如果有的话Q?br />范围起始 a.begin() q回一个指向容器第一个元素的q代?iterator)。[7] a.begin()要么是提领要么是past-the-end。仅仅当a.size == 0的时候它才是past-the-end?br />范围l束 a.end() q回一个指向容器的最后一个元素的后面的P代器(iterator)?nbsp; a.end ?past-the-end?br />大小 a.size() q回容器的大,也就是元素的个数。[8] a.size() >= 0 && a.size <= a.max_size()
最大容?nbsp; a.max_size() q回容器的最大容量。[8] a.max_size() >= 0 && a.max_size >= a.size()
I容?nbsp; a.empty() 相当?a.size() == 0 Q但是可能更快)
交换 a.swap(b) 相当于swap(a,b)[9]
复杂性担?br />
拯构造函敎ͼ复制操作W,析构函数跟容器大呈U性关pR?br />
begin()和end()的摊销旉为常数?br />
size()跟容器大呈U性关pR[10] max_size()和empty()的摊销旉为常数。如果你要测试一个容器是否ؓ(f)I,你应该L写c.empty而不是c.size() == 0。这两个表达式是{h(hun)的,但前者可能要快得多?br />
swap()的摊销旉为常数。[9]不变?/h3>
有效范围 M容器aQ?[a.begin(), a.end())是一个有效范围。[11]
范围大小 a.size(){于从a.begin()到a.end()的距R?br />完整?nbsp; 一个P代算法[a.begin(), a.end())Q将?x)遍历a中的每个元素。[11]模型
vector注释
[1]元素的寿命不能超q其容器可能看v来像一个严重的限制Q事实上Q它q不是限制。请注意指针和P代器都是对象Q就像Q何其他对象一P他们可以被存储在一个容器内。在q种情况下,容器拥有指针本nQ而不是它们指向的对象?br />
[2]q种表达式必L一个typedefQ这是一个类型的代名词?br />
[3]q可能是一个typedef或者其他类型,或者一个定义嵌套类作ؓ(f)一个内部类的X的特定的cd?br />
[4]容器的iteratorcd和const iteratorcd可能是一L(fng)Q不能保证每个容器必L一个相关的可变q代器类型。例如,set和hash_set定义iterator和const iterator为同一cd?br />
[5]引用cd需要与普通C++引用cd有相同的语义Q但它实际上q不是普通的C++引用。例如,在某些实CQ可能会(x)提供额外的引用类型来支持非标准的内存模型。但是请注意Q?#8220;引用”Q用户定义的引用cd提供额外的功能)不是一个可行的选择。用户定义的cd不可能与C++引用cdh相同语义Q因为C++语言不支持重新定义的成员讉Kq算W?operator.)?br />
[6]跟[5]中的引用cd一P指针cd需要与C++指针有相同的语义Q但实际q不是C++指针?#8220;指针”不同?#8220;引用”是有可能的。因为可以ؓ(f)用户定义cd来定义的引用操作W和指针成员讉Kq算W可以访问运符*?>?br />
[7]q代器类?iterator type)必须是一个输入P代器(input iterator)Q它只提供了一个非常薄q担保Q特别是Q输入P代算法必都?#8220;单通道”。容器只有一个简单的q代?iterator)可以随时ȀzRForward Container(前向容器)没有q个限制?br />
[8]一个固定大的容器Qsize() == max_size()?br />
[9]对于MAssignablecdQswap可以定义分配条款。这需要三个Q务,每一个容器类型,容器的大呈U性关pR然而,在某U意义上Qa.swap(b)是多余的。它的存在仅仅ؓ(f)了提高效率:(x)许多容器Q如vector和listQ它实现swap的时间复杂度是不变的Q而不是线性的。一些容器类型XQ那么它们的模板化swap(X&,X&)可以单地写在X::swap(X&)。也是说X::swap(X&)只能定义在执行时间是帔R的情况下。不是所有的容器cX都需要这L(fng)一个成员函敎ͼ但是如果q样的函数存在,那么必须保证摊销旉为常量?br />
[10]对于许多容器Q如vector和dequeQsize是O(1).q满了O(N)的要求?br />
[11]虽然[a.begin(), a.end())必须是一个有效的范围Q而且每个元素必须都包含在容器内,但是在这个范围内出现的顺序是不确定的。如果你两次遍历一个容器,它不能保证这两次的遍历顺序是相同的。Forward Container前向容器没有q个限制?br />参见
q代器概qͼ输入q代器,序列
]]>
2、一元函?br /> 3、二元函?br /> 4、Adaptable Generator(可适应的不需要参数的函数)
5、一元可适应函数
6、二元可适应函数
7、谓?br /> 1、谓?br /> 2、二元谓?br /> 3、可适应谓词
4、二元可适应谓词
5、StrictWeakOrdering
8、Monoid曚w
9、随机数生成?br /> 3、预定义函数对象
1、算术运?br /> 1、加?br /> 2、减?br /> 3、乘法(原名“?#8221;Q?br /> 4、除?br /> 5、取模运?br /> 6、否?br /> 2、比较算?br /> 1、equal_to
2、not_equal_to
3、less
4、greater
5、less_equal
6、greater_equal
3、逻辑操作
1、logical_and(逻辑?
2、logical_or(逻辑?
3、logical_not(逻辑?
4、广义n份认证操?br /> 1、identity
2、project1st
3、project2nd
4、select1st
5、select2nd
5、subtractive_rng
4、函数对象适配?br /> 1、binder1st
2、binder2nd
3、ptr_fun
4、pointer_to_unary_function
5、pointer_to_binary_function
6、unary_negate
7、binary_negate
8、unary_compose
9、binary_compose
10、成员函数适配?br /> 1、mem_fun
2、mem_fun_ref
3、mem_fun1
4、mem_fun1_ref
7、Utilities
1、概?br /> 1、Assignable
2、Default Constructible
3、Equality Comparable
4、LessThan Comparable
2、函?br /> 1、关pL作符
3、类
1、pair
8、内存分?br /> 1、类
1、分配器
2、raw_storage_iterator
2、函?br /> 1、construct
2、destroy
3、uninitialized_copy
4、uninitialized_copy_n
5、uninitialized_fill
6、uninitialized_fill_n
7、temporary_buffer
8、get_temporary_buffer
9、return_temporary_buffer
9、设计文?br /> 1、线E安?br /> 2、复杂规格的意义
3、字W串的表C?br />10、分cȝ?br />11、全文烦?br />
]]>
1、简?br /> 2、概?br /> 1、普通P代器
2、输入P代器
3、输P代器
4、前向P代器
5、双向P代器
6、随问P?
3、P代器标签
1、简?br /> 2、iterator_traits
3、iterator_category
4、distance_type
5、value_type
6、P代器标签c?br /> 1、input_iterator_tag
2、output_iterator_tag
3、forward_iterator_tag
4、bidirectional_iterator_tag
5、random_access_iterator_tag
7、P代器基础c?br /> 1、input_iterator
2、output_iterator
3、forward_iterator
4、bidirectional_iterator
5、random_access_iterator
4、P代函?br /> 1、distance
2、advance
5、P代器c?br /> 1、istream_iterator
2、ostream_iterator
3、front_insert_iterator
4、back_insert_iterator
5、insert_iterator
6、reverse_iterator
7、reverse_bidirectional_iterator
8、raw_storage_iterator
9、sequence_buffer
5、算?br /> 1、不?x)改变内容的?br /> 1、for_each
2、find
3、find_if
4、adjacent_find
5、find_fist_of
6、count
7、count_if
8、mismatch
9、equal
10、search
11、search_if
12、find_end
2、会(x)改变内容的算?br /> 1、copy
2、copy_n
3、copy_backward
4、交?br /> 1、swap
2、iter_swap
3、swap_ranges
5、transform
6、替?br /> 1、replace
2、replace_if
3、replace_copy
4、replace_copy_if
7、fill
8、fill_n
9、generate
10、generate_n
11、移?br /> 1、remove
2、remove_if
3、remove_copy
4、remove_copy_if
12、unique
13、unique_copy
14、reverse
15、reverse_copy
16、rotate
17、rotate_copy
18、random_shuffle
19、random_sample
20、random_sample_n
21、partition
22、stable_partition
3、排?br /> 1、排?br /> 1、sort
2、stable_sort
3、partial_sort
4、partial_sort_copy
5、is_sorted
2、nth_element
3、二q制搜烦
1、lower_bound
2、upper_bound
3、equal_range
4、binary_search
4、merge
5、inplace_merge
6、排序范围内讄操作
1、includes
2、set_union
3、set_intersection
4、set_difference
5、set_symmetric_difference
7、堆操作
1、push_heap
2、pop_heap
3、make_heap
4、sort_heap
5、is_heap
8、最大值和最?br /> 1、min
2、max
3、min_element
4、max_element
9、lexicographical_compare
10、lexicographical_compare_3way
11、next_permutation
12、prev_permutation
4、广义数值算?br /> 1、iota
2、accumulate
3、inner_product
4、partial_sum
5、adjacent_difference
7、power
下一??a id="viewpost1_TitleUrl" href="../archive/2012/03/12/167718.html">标准模板?目录?函数对象、Utilities、内存分?/a>?br />
]]>
“我的产品q没有准备好?/strong>”你说q之前。我们都曄说过?br />
每个人在发布他们W一个品的时候都?x)觉得他们的产品q没有完全准备好。或者甚x已经发布在用的Q也没有惌中的那么完美Q因为如果你只是做一点点Q他׃(x)变的更好一炏V在正常情况下,q会(x)D潜在很大的改善\U图Q在一个不正常的情况下Q它?x)导致这个品无休止的P代,始终得不到结果?br />
大约在一q前Q我拜访了Pixar的办公室了解到有x产品的一点,我想和大家分享下面的q个故事:(x)
Over at Pixar...
Matt Silas(@matty8r),Pixar的长期雇员带我参观了他们的办公室Q我也接受了他的盛情Ƒ־。从Palo Alto出发l过长达一时的RE终于到了EmeryvilleQMatt向我展示了整个个ȝ上的奥斯卡奖Q然后开始全面的参观。我们有拍很多照片,所以这里好的像是:(x)VentureBeat,Urbanpeak?br />
我一直是Pixar的粉?-不仅仅是他们的品,q有他们的历史和文化。关于Pixar和他们创造电(sh)qq程是多么的qhQ还有很多话要讲Q我推荐一本书Q《To Infinity and Beyond》。它让我知道了在他们的电(sh)׃使用了一些非常的合作和P代的Ҏ(gu)Q毕竟,做的比较多的q是软g。这里有一些简单的例子Q?br />
Pixar的团队是由有创意的h才和软g工程师组成的。这是反映在他们的高层,John Lasseter和Ed Catmull?br />
Pixar?sh)?jing)的过E是从一个故事开始的--然后故事情节--然后用一些方法来形成最后的蓝图?br />
他们每天在构Z们的“?sh)?jing)”Q让他们知道他们的立场,在需要的地方用上素描和蹩脚的CGI--跟传l电(sh)׃同的是在它的最后?br />
有时候,他们?#8220;玩具d?#8221;的原始版本,他们必须停止他们正在做的事情Q然后重新开始这个电(sh)影制作过E直到所有事情确定下?-听v来很熟?zhn)Q有木有Q?br />
其他有关高科技世界的是Steve Jobs亲自监督他们的办公室I间的设计。《超人》导演Brad Bird对于q个有专业的说法Q?br />
“q是我们的徏{。这中间Q他造了一个大的中庭区Q最初似乎觉得这是在费I间。原因就是大家来之后都在各自的办公室I间工作。Y件工E师在这里,dȝ在这里,q有那边是做设计的。Steve 把信,?x)议室,食堂Q最的最想不到的是ʎ室,居然在最中间--当初让我们觉得很疯狂--每个人的一天都可以在这里完成。Jobs意识到当Z在于其他人眼接触时Q事情就?x)发生了。所以他惛_法不让他们接触到其他公司?#8221;
无论如何Q我听到很多q样的故?-像预期的一Pq次参观是难以忘记的Q最后,我们停在PixarC品店?br />
在那里,我问Matt一个休闲的问题Q一q之后,我还清楚的记得:(x)
我说Q?#8220;Pixar?sh)?jing)中你最喜欢哪一部?”
Matt: *Ҏ(gu)*
我笑着_(d)(x) “Z么叹气?”
Matt: “q是一个很手的问题,因ؓ(f)他们都是很好的。但是同Ӟ因ؓ(f)你在q里工作Q你׃那么长的旉在上面,你很难会(x)ȝ它。你知道你所作的所有的决定和所有采取的捷径。你也记得那些风险你必须攑ּ和结束的Q因Z没有旉了。所以当你看?sh)?jing)的时候,你可以看到所有的~陷Q知道你看到你的朋友和家人时Q你才会(x)开始忘记这些?#8221;
哇哦Q如此深刅R?br />
世界上像Pixarq样的公司,无疑?x)生一些最令h喜爱和完的l验Q但是最后还是没能生一个品,让团队中所有的人都认ؓ(f)它是最好的。之后思考ؓ(f)什么会(x)是这样呢Q原因是显而易见的--用预见性和技能来完善一些能使之更好Q还需要能力是一个巨大的关键炏V比你的能力更关键的Q我觉得是完善或者解册计问题的速度不够快。因为所有的设计使整个系列^衡,q个时候你不结束,你到底想要什么呢?br />
教训Q你永远是不?x)高兴的?/strong>
在这ơ谈话中我得CQ就是我们做很多工作让我们的产品更好Q但是永q不?x)到达满意。一个伟Z旦说q你的品是垃圾--也许你一直会(x)认ؓ(f)它就是垃圾。然而在同一旉Q它是我们创意的斗争Q最l我们的创作越来越好。有一天,即你仍然认Z的品很p糕Q你?x)看C的顾客正在开心地使用它?br />
一个短暂的瞬间Q你?x)忘记对于它你?f)什么会(x)不满意?br />
特别感谢Matt Silas(@以撒1985, x?l我一个独特的l验。(最后,我在Luxo Jr.旁边拍了一张照片后d了。)
喜欢q篇文章吗?
如果你喜Ƣ这文章,误阅或者关注我的微薄。在q里你还可以扑ֈ更多的文章?br />
Andrew Chen?br />
Canaan译 微薄Q@以撒1985Q?br />
2012q???下午7:27
]]>
标准模板?目录一 容器
1、STL?br />2、如何用文?br />3、容?br /> 1、概?br /> 1、一般概?br /> 1?a target="_blank" href="http://www.shnenglu.com/chinapeter2008/archive/2012/03/13/167769.html">容器
2?a target="_blank" href="http://www.shnenglu.com/chinapeter2008/archive/2012/03/19/168310.html">前向容器
3?a target="_blank" href="http://www.shnenglu.com/chinapeter2008/archive/2012/03/21/168512.html">可逆容?/a>
4?a target="_blank" href="http://www.shnenglu.com/chinapeter2008/archive/2012/03/31/169644.html">随机讉K容器
2、序?br /> 1、序?br /> 2、前面插入序?br /> 3、后面插入序?br /> 3、关联容?br /> 1、关联容?br /> 2、简单关联容?br /> 3、结对关联容?br /> 4、排序关联容?br /> 5、哈希关联容?br /> 6、哈希函?br /> 7、单一兌容器
8、多重关联容?br /> 9、单一排序兌容器
10、多重排序关联容?br /> 11、单一哈希兌容器
12、多重哈希关联容?br /> 2、容器类
1、序?br /> 1、vector(向量)
2、deque(队列)
3、list(?
4、bit_vector(位向?
2、关联容?br /> 1、set(集合)
2、map(映像)
3、multiset(多重?
4、multimap(多重映像)
5、hash_set(哈希?
6、hash_map(哈希映像)
7、hash_multimap(哈希多重映像)
8、hash(哈希)
3、字W串?br /> 1、Character Traits
2、char_traits
3、basic_string
4、rope
5、容器适配?br /> 1、stack(?
2、queue(队列)
3、priority_queue(优先队列)
6、bitset(位集)
下一?《标准模板库 目录?q代器?/div>
]]>
STL的其他部?Other parts of the STL)
如果你理解算法,q代器和容器Q那么就几乎知道STL的所有。然后,STLq包括一些其他类型的lg。首先,STL包括一些utilitiesQ在库的不同地方使用的非常基本的概念和功能。Assignable概念Q例如,描述那些有赋值操作符和拷贝构造函数的cd。几乎所有STL的类都是Assignable模式Q几乎所有的法都要求他们的参数是Assignable模式的?br />
其次QSTL包含一些低层次的机制来分配和释攑ֆ存。分配器非常专业Q无Z使用它们的目的是什么,你都可以安全的忽略它们?br />
最后,STL包括了大量的函数对象集,也被UCؓ(f)函子(functors)。正如P代器是指针的泛化Q函数对象是函数的泛化:(x)你可以用普通的函数调用Ҏ(gu)来调用一个函数对象:(x)q里有几U不同概늚函数对象关系Q包括一元函敎ͼ只有一个参数的函数对象Q即一个被UCؓ(f)f(x)的函数对象)和二元函敎ͼ需要两个参数的函数对象Q即一个被UCؓ(f)f(x,y)的函数对象)。函数对象是一般程序的一个重要组成部分,因ؓ(f)它们不仅仅允许对象类型抽象泛型编E还允许正在执行的操作抽象泛型编E?/div>
]]>
输入q代器实际上是一个比较薄q概念Q它必须的要求很。输入P代器必须支持指针的算术运的一个子集(使用前缀和后~操作W?来增加输入P代器Q)Q但是ƈ不是需要指针所有的术q算。这对于find法已经_了,但是一些另外的法的参数需要满额外的要求。reverse法Q它的参数的“减少”(decrement)功能必须要像“增加”(increment)功能一L(fng)Q它使用表达?--last。在概念斚wQ我们说revers法的参数必L双向q代?Bidirectional Iterator)模式Q而不是输入P代器?br />
双向q代器概念非常类g输入q代器概念:(x)它只是简单的增加了一些额外的要求。双向P代器模式cd是输入P代器模式cd的一个子集。Q何一个类型,如果它是双向q代器模式,那么它肯定也是输入P代器模式。例如,int*Q既是双向P代器模式又是输入q代器模式。但istream_iteratorQ只是一个输入P代器模式。它不符合更严格的双向P代器的要求。双向P代器是输入P代器的一个改q。改q这个概念就跟c++cM的扉K常相|(x)我们使用不同的词Q而不叫它“l承”的最主要的原因是“改进”的概念而不是实际类型?br />
除了我们已经讨论的两个P代器概念Q其实还有另外三个P代器概念Q这5个P代器概念有输P代器Q输入P代器Q前向P代器Q双向P代器和随问P代器Q前向P代器是输入P代器的改q,双向q代器是前向q代器的改进Q随问P代器是双向P代器的改q。输P代器与其他四个P代器是有关系的,担不是一部分层次的改q:(x)它不是Q何其他P代器概念的改q,也没有其他P代器是从改进它而来的。P代器概述有更多关于P代器一般的消息?br />
容器c,像P代器一P被组l成一个层ơ的概念。所有容器都是容器概忉|式;更完善的概念Q如序列和关联容器,描述特定cd的容器?br />
下一?《STL的其他部分?br />
]]>
概念和徏?Concepts and Modeling)
M模板函数的一个非帔R要的问题Q不仅仅是关于STL法Q而是什么类型集可以正确的替换Ş式模板参数。很明显Q例如,int* 或double*可以替换find函数的Ş式模板参?strong>InputIterator。同h楚的是,int或double可能不行Qfind函数使用表达?firstQ和用操作符Q从而intcd对象或doublecd对象没意义。那么基本的{案是,发现STL隐式定义了一套类型的需求,它可以满些要求的实例。替?strong>InputIterator的Q何类型必L供这些操作:(x)它必能够比较两个对象是否相{,它必d以增加该cd的一个对象,它必d以通过该类型的引用来获得它指向的对象,依次cL?br />
find函数q不是STL中有q些需求的唯一的算法;for_each函数和count函数Q还有其他算法函数的参数也必要满q些要求。这些要求相当重要,值得我们l它们一个名字:(x)我们U这U类型集的要求ؓ(f)概念(concept)Q我们称q个特定的概念ؓ(f)输入q代?Input Iterator)。一个类型如果满了所有这些要求,我们说这个类型符合一个概念,或者说是一个概忉|型。我们说int*是一个输入P代器(Input Iterator)的模型,因ؓ(f)int*提供了输入P代器的所有要求的操作?br />
概念不是C++语言的一部分;没有办法在一个程序中定义一个或者申明一个概忉|型的特定cd。然而,概念是STL的一个极光要的l成部分。用概?concepts)使得写程序时有可能把接口从实C清楚地分:(x)find函数的作者只需要考虑q个接口W合输入q代?Input Iterator)概念Q而不是去实现每一个可能的cdW合q个概念。同P如果你想使用find函数,你只需要确保你传递给他的参数是输入P?Input Iterator)模型。这是find函数和reverse函数可以用于lists,vector,C数组Q和许多其他cd的原因:(x)概念~程Q而不是ؓ(f)特定cd~程Q得它可以重用软glg和结合这些组件?br />
下一?《改q?refinement)?/a>
]]>
在上面C数组逆向排序的例子中Qreverse的参数明显是double*cd。如果用reverse逆向排序vector或list, 参数又是什么呢Q也是说reversex的是什么参敎ͼq有v.begin
()和v.end()q回什么?
{案是reverse的参数是q代?iterators)是指针对一般化。指针本w就是P代器Q所以reverse可以逆向排序C数组中的元素。类似的Qvectorx了嵌套类型iterator?br />
const_iterator。在上面的例子中Qv.begin()和v.end()的返回类型是 vector<int>::iterator。也有一些P代器Q像istream_iterator和ostream_iteratorQ它们与容器是没?br />
兌的?br />
q代器是让算法与容器分离成ؓ(f)可能Q算法是模板Q需要被q代cd参数化用,所以它们不?x)限制在某一U容器类型。考虑Q例如,如何写一个算法在一个范围内q行U性搜?br />
。下面是STL中find法?br />
template<class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, const T&value)
{
while(first != last && *first != value)++first;
return first;
}
find函数需要三个参敎ͼ(x)两个q代器定义一个范_(d)q有一个value值查找。它在[first,last)q个范围内从开始到最后一个一个检查P代,当它扑ֈ一个P代指向的D我们L
的值相同时或者它到达范围的结束时Q就停止查找?br />first和last被申明ؓ(f)InputIteratorcdQ而InputIterator是一个模板参数。也是说实际上没有一个类型ؓ(f)InputIteratorQ当你调用find函数Ӟ~译器会(x)把Ş式参?br />
InputIterator和T替换成实际类型参数。如果find函数的前面两个参数类型ؓ(f)int*Q第三个参数cd为int,那么像调用下面的函数?br /> int* find(int* first, int* last, const int& value)
{
while(first != last && *first != value)++first;
return first;
}
下一?《概念与建模?/div>
]]>
STL是一个包含类Q算法和q代器的C++库;它提供许多计机U学的基本算法和数据l构。STL是一个基本库Q意味着它的l成有大量的参数Q基本上每个l成部分都是一个模ѝ在你用STL之前要弄清楚模板是怎么工作的?br />
容器和算?/strong>
像许多其他cd一?STL库也包含容器c:(x)q些cȝ意图是用来容U_他对象。STL包含VectorQ矢量,向量Q类QlistQ清单),dequeQ队列),setQ集Q?multisetQ多重集Q?map,multimap,hash_setQ哈希集Q?hash_multisetQ哈希多重集Q?hash_map和hash_multimap。所有这些类都是一个模板,它可以实例化来容UQ何类型的对象。D个例子,你可以用vector<int>来代替普通的C数组Q而且vector不用理分配动态内存?br />
vector<int> v(3); //声明一个包?个元素的vector?br /> v[0] = 7;
v[1] = v[0] + 3;
v[2] = v[0] + v[1]; //v[0] == 7, v[1] == 10, v[2] == 17
STL也包含了很多法用来操作容器中的数据。你可以使一个vetor中的元素逆向排列QD个用reverse法的例子?br />
reverse(v.begin(), v.end()); // v[0] == 17, v[1] == 10, v[2] == 7
调用q个reverse函数需要注意两个要炏V第一Q它不是成员函数Q而是一个全局函数。第二,它需要两个参数而不是一个:(x)它不是作用在容器上,而是作用在一pd元素上。在q个具体的例子一pd元素是整个容器v?br />
q些事实的原理都是一L(fng)QreverseQ像其他STL法Q都是与STL容器cdȝ。这意味着reverse不仅仅只能用在vector中的元素Q还可以用在lists中的元素Q甚xC数组中的元素。下面的E序是正的?br />
double A[6] = {1.2, 1.3, 1.4, 1.5, 1.6, 1.7}Q?br /> reverse(A, A + 6);
for(int i=0; i<6; ++i)
cout << "A[" << i << "]=" << A[i];
q个例子用了一个范_(d)像逆序一个vector的例子:(x)reverse的第一个参数指向这个范围的开始,W二个参数指向这个范围的末尾的后面。这个范围是[A, A+6Q;q两个不对称的记可人想C个不一L(fng)端点Q第一个是q个范围的开始,W二个是q个范围末端的后一位?br />
下一节《P代器?/a>
]]>
索引
设计文档
其他STL资源
IOstream库(实验Q?/p>
如何使用本站
STL下蝲
分类索引
最新消?/p>
常见问题
允许免费使用Q复Ӟ修改Q分发和出售本Y件及(qing)其文档以M用途。只是在拯文g和支持文档中都要有版权申明。Silicon Graphics 没有因ؓ(f)M陈述本Y仉合范围。它按原h供没有Q何担保?/p>
版权所?#169; 1994
惠普公司
原文Q?a onclick="pageTracker._trackPageview('/outgoing/www.sgi.com/tech/stl/?referer=');" target="_blank">http://www.sgi.com/tech/stl/