For more information on iterators, see Iterators. This language can iterate on element of vectors and you can create own iterators. New access and traversal operations can be defined independently by defining new iterators. Both maps and sets support bidirectional iterators. STL/CLR defines STL-like containers, iterators and algorithms that work on C++/CLI managed objects. A yield statement is used to implement iterators over user-defined data abstractions. For example, C++ Standard Template Library, Java iterators, C# enumerables, etc. Another example for policy iterators are evolutionary algorithms. The API includes Python iterators that allow scripts to traverse outlines easily. The STL implements five different types of iterators. Several languages, such as Perl and Python, implement streams as iterators. Iterators are the major feature that allow the generality of the STL. These include "forward iterators", "bidirectional iterators", and "random access iterators", in order of increasing possibilities. It provides four components called "algorithms", "containers", "functions", and "iterators". Different iterators can be used to access and traverse an aggregate in different ways.