Open main menu

CDOT Wiki β

Changes

Iterator

3,096 bytes added, 11:53, 21 January 2007
References
__TOC__ The An Iterator Pattern is commonly used in Computer Science as provides the user with a way to access the elements of a collection, regardless of how they were implemented. An iterator may also be called a cursor.== Description ==An iterator may be though of as a some kind of pointer that has two basic operations, referencing one particular element in a collectionlist sequentially, and pointing to while keeping the next element in the collection. Depending on the language the iterator is implemented in, other functionality may be added to the iterator objectelements of that list from exposing their underlying representation.__TOC__
The purpose == Introduction to Iterators == An iterator may be though of an iterator is to give as a user kind of pointer that has two basic operations, referencing one particular element in a way collection, and pointing to process each the next element of in the collection (current, and current.next). Depending on the language the iterator is implemented in, other functionality may be added to the iterator object, such as remove and update and so on. Iterator ties together the [http://en.wikipedia.org/wiki/Object_oriented_programming object-oriented programming] principles known as encapsulation and [http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29 polymorphism]. Using an iterator, you can manipulate the objects in a container while separating collection without explicitly knowing how the user from collection is implemented or what the internal structure collection is made up of (Different types of the containerobjects perhaps?). This allows An iterator provides an interface to different iteration implementations, which contain the container to store elements however it wants details of how tomanipulate a specific collection, while allowing including which items in the user collection to use it as if it were just a simple list or sequenceshow (filtering) and in what order (sorting).  An iterator class easy way to think of iterators, is usually designed to also think of, [http://en.wikipedia.org/wiki/List_%28computing%29 Lists], [http://en.wikipedia.org/wiki/Linked_list Linked Lists], [http://en.wikipedia.org/wiki/Binary_tree Binary Trees], and [http://en.wikipedia.org/wiki/Hash_tables Hash Tables], because they operate very much in coordination with the container class, which usually provides methods or functions for creating same way that iteratorsdo.
An easy way to think of iterators, is to look at Linked Lists, because they operate very similarly.
=== Implicit Iterators ===
 Some object-oriented languages have iterator support included within the language, without having to implement an explicit iterator object.Some of these language include: * C#* Java (After 5.0)* Python* PERL  === UML === Design class diagram in UML of the Iterator Pattern being used in a system. [[Image:Iterator1.png]]  == Code Samples == The following are samples of code from C#, Java, Python, and PERL, displaying how they use their implicit iterators.  === C# ===  // C#, implicit iteration foreach (Value v in list) Console.WriteLine(v);  === Java ===  // Java, J2SE 5.0, implicit iteration for (Value v : list) System.out.print(v);  === Python ===  # Python, implicit iteration for Value in List: print Value  === PERL ===  # Perl, implicit iteration foreach $val (@list) { print "$val\n"; } == Examples == === C++ === This is a code snippet from a file called [http://www.google.com/codesearch?hl=en&q=show:3faa7gjspWs:MYoIVGFTT9Q:S6XmQxn_Gd8&sa=N&ct=rd&cs_p=http://gentoo.osuosl.org/distfiles/gnome-vfsmm-1.3.5.tar.gz&cs_f=gnome-vfsmm-1.3.5/libgnomevfs/libgnomevfsmm/transfer.cc transfer.cc], created by the Gnome VFS Development Team. This particular function, transfer_list, transfers a list of URI's from the source list to the target list. The source code repository can be found [http://www.google.com/codesearch?hl=en&q=show:7egWPqDRuQg:6mN6dZ6BKgU&sa=N&ct=rdp&cs_p=http://gentoo.osuosl.org/distfiles/gnome-vfsmm-1.3.5.tar.gz here].  void transfer_list(const Glib::StringArrayHandle& source_uri_list, const Glib::StringArrayHandle& target_uri_list, TransferOptions options, ErrorMode error_mode, OverwriteMode overwrite_mode, const SlotProgress& slot) { typedef std::list< Glib::RefPtr<Uri> > uri_list; uri_list sources, targets; //Build lists of RefPtr<Uri>s from the strings: Glib::StringArrayHandle::const_iterator iter_target = target_uri_list.begin(); for(Glib::StringArrayHandle::const_iterator iter = source_uri_list.begin(); iter != source_uri_list.end(); ++iter) { if(iter_target != target_uri_list.end()) { sources.push_back( Uri::create(*iter) ); targets.push_back( Uri::create(*iter_target) ); iter_target++; } } transfer_list_uris(sources, targets, options, error_mode, overwrite_mode, slot); }   == References == * [http://en.wikipedia.org/wiki/Iterator Wikipedia entry on Iterator]* [http://thor.info.uaic.ro/ Universitatea Alexandru Ioan Cuza]* [http://www.google.com/codesearch?hl=en&q=show:7egWPqDRuQg:6mN6dZ6BKgU&sa=N&ct=rdp&cs_p=http://gentoo.osuosl.org/distfiles/gnome-vfsmm-1.3.5.tar.gz Gnome VFS Development Source Code]
1
edit