イテレータ
Perlには、foreach、each といった繰り返しのキーワードがある。 他に、Tie機能(変数操作のオーバーロード)でユーザーデータに対するイテレータを定義できる。
RubyではEnumerableが、eachなどのイテレートするメソッドを持っている内部イテレータである。eachメソッド呼出しに { ... } という書式で「ブロック」を書くと、その中の手続きが繰返し実行される。
C++では、STLが外部イテレータの枠組みを定義している。この枠組みはポインタと構文上の互換性を持つよう定められているため、ポインタを用いるコードと同等のコードでイテレータを使用することができる。
C++ではイテレータの種類によって使用できる演算子に違いがある。例えば、std::vectorコンテナのイテレータのような「ランダムアクセスイテレータ」と、std::listコンテナのイテレータのような「双方向イテレータ」は、共にインクリメント/デクリメント演算子を用いて直後/直前(次/前)の要素を指すことができる。しかし、任意の幅の加算/減算はランダムアクセスイテレータでのみ定義されている。ランダムアクセスイテレータは双方向イテレータの一種だが、イテレータの進行操作は定数時間で実行できることが要件として定められている。std::listコンテナの要素は、前後の要素へのポインタしか保持していないためシーケンシャルアクセスしかできず、イテレータの進行操作が定数時間で実行できないため、ランダムアクセスイテレータをサポートすることができない。
もともとC++のイテレータはテンプレートを利用した静的ダックタイピングによるものであり、各イテレータの要件定義は規格で文書化されていたものの、言語構文としてはサポートされていなかった。しかし、C++20ではコンセプト (concept) をサポートしたことにより、std::random_access_iteratorやstd::bidirectional_iteratorなどの形で満たすべき要件をコードとして書き下すことが可能になった。
D言語では、標準ライブラリにレンジ (Range) というイテレータが定義されており、規定されたインターフェイスを持っているオブジェクトなら何でもレンジとして扱うことができる。
Delphiでは、バージョン2005よりfor-in構文によるイテレータがある。ユーザーによるイテレータはMoveNextメソッドやCurrentプロパティを任意のクラス等に実装することで定義でき、型に厳格なPascal系言語ながらこれらを実装するだけでfor-inにより認識されるというダックタイピングにも似た仕組みとなっている。