▁in ▁Sch eme ▁and ▁Ada , ▁although ▁the ▁best ▁known ▁example ▁is ▁the ▁Standard ▁Template ▁Library ▁( ST L ), ▁which ▁developed ▁a ▁theory ▁of ▁iter ators ▁that ▁is ▁used ▁to ▁dec ou ple ▁sequence ▁data ▁structures ▁and ▁the ▁algorithms ▁operating ▁on ▁them . ▁ ▁For ▁example , ▁given ▁N ▁sequence ▁data ▁structures , ▁e . g . ▁sing ly ▁linked ▁list , ▁vector ▁etc ., ▁and ▁M ▁algorithms ▁to ▁operate ▁on ▁them , ▁e . g . ▁find , ▁sort ▁etc ., ▁a ▁direct ▁approach ▁would ▁implement ▁each ▁algorithm ▁specifically ▁for ▁each ▁data ▁structure , ▁giving ▁ ▁combinations ▁to ▁implement . ▁However , ▁in ▁the ▁generic ▁programming ▁approach , ▁each ▁data ▁structure ▁returns ▁a ▁model ▁of ▁an ▁iterator ▁concept ▁( a ▁simple ▁value ▁type ▁that ▁can ▁be ▁dere fer enced ▁to ▁retrieve ▁the ▁current ▁value , ▁or ▁changed ▁to ▁point ▁to ▁another ▁value ▁in ▁the ▁sequence ) ▁and ▁each ▁algorithm ▁is ▁instead ▁written ▁gener ically ▁with ▁arguments ▁of ▁such ▁iter ators , ▁e . g . ▁a ▁pair ▁of ▁iter ators ▁pointing ▁to ▁the ▁beginning ▁and ▁end ▁of ▁the ▁sub sequence ▁or ▁range ▁to ▁process . ▁Thus , ▁only ▁ ▁data ▁structure - algorithm ▁combinations ▁need ▁be ▁implemented . ▁Several ▁iterator ▁concepts ▁are ▁specified ▁in ▁the ▁ST L , ▁each ▁a ▁ref in ement ▁of ▁more ▁restrict ive ▁concepts ▁e . g . ▁forward ▁iter ators ▁only ▁provide ▁movement ▁to ▁the ▁next ▁value ▁in ▁a ▁sequence ▁( e . g . ▁suitable ▁for ▁a ▁sing ly ▁linked ▁list ▁or ▁a ▁stream ▁of