a == bという要件は++a == ++bが等しいことを意味しており、これらの要件はイテレータにマルチパス保証を要求するものである。すなわち、あるイテレート範囲を複数のイテレータから同時に同じ順序で走査することができることを要求する。incrementableなイテレータはその操作によってイテレータが参照しているシーケンスの状態が変化してはならない。多くの一般的なイテレータがこの要件を満たしている。
例
#include <iostream>#include <concepts>#include <iterator>#include <memory>#include <vector>template<std::incrementableI>voidf(constchar*name){std::cout<<name<<" is incrementable"<<std::endl;}template<typenameI>voidf(constchar*name){std::cout<<name<<" is not incrementable"<<std::endl;}structsample_incrementable{friendautooperator++(sample_incrementable&)->sample_incrementable&;friendautooperator++(sample_incrementable&,int)->sample_incrementable;// prvalueを返す必要があるfriendbooloperator==(constsample_incrementable&,constsample_incrementable&)=default;usingdifference_type=int;};structsample_weak_incrementable{friendautooperator++(sample_weak_incrementable&)->sample_weak_incrementable&;friendautooperator++(sample_weak_incrementable&,int)->sample_weak_incrementable&;usingdifference_type=int;};intmain(){f<int*>("int*");f<constint*>("const int*");f<std::vector<int>::iterator>("std::vector<int>::iterator");f<sample_incrementable>("sample_incrementable");std::cout<<"\n";f<int*const>("int* const");f<std::ostream_iterator<double>>("std::ostream_iterator<double>");f<sample_weak_incrementable>("sample_weak_incrementable");}
出力
int* is incrementable
const int* is incrementable
std::vector<int>::iterator is incrementable
sample_incrementable is incrementable
int* const is not incrementable
std::ostream_iterator<double> is not incrementable
sample_weak_incrementable is not incrementable
You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.