Presentation is loading. Please wait.

Presentation is loading. Please wait.

Concepts of Programming Languages

Similar presentations


Presentation on theme: "Concepts of Programming Languages"— Presentation transcript:

1 Concepts of Programming Languages
Dr. Mohamed Yehia Dahab

2 Iterator We often want to access every item in a data structure or collection in turn We call this traversing , iterating over, stepping through or visiting every item Example with a data structure (array): for (int i = 0; i < arr.length(); i++) // do something to arr[i]

3 Iterator (Cont’) What if we want to traverse a collection of objects?
A list, a stack, a queue … Its underlying implementation may not be known to us Java provides a common scheme for stepping through all elements in any collection, called an iterator

4 What is an Iterator? An iterator is a mechanism used to step through the elements of a collection one by one Each element is “Visited” exactly once

5 Why use Iterators? Traversing through the elements of a collection is very common in programming, and iterators provide a uniform way of doing so (Reusability) Advantage? Using an iterator, we don’t need to know how the collection is implemented! 2-5

6 Iterator Interface (in Java)
The Java API has a generic interface called Iterator<T> that specifies what methods are required of an iterator public boolean hasNext( ); returns true if there are more elements in the iteration public <T> next( ); returns the next element in the iteration public void remove( ); removes the last element returned by the iterator (optional operation) public void set( <T> Obj); Set the last element returned by the iterator (optional operation) ………. It is in the java.util package of the Java API

7 Iterator Interface (in Java) (Cont’)
For Forward Traversing Next() hasNext() For Backward Traversing Previous() hasPrevious() For Modifying remove set

8 Iterator Interface (in Java) (Cont’)
public static void main (String[] args) { ArrayList al = new ArrayList(); al.add("Mohamed"); al.add("Ragab"); al.add("Ramadan"); Iterator itr = al.iterator(); while(itr.hasNext()) { Object obj = itr.next(); System.out.print(obj + "-->"); }

9 Using an Iterator in an Application
Example: Suppose we had an unordered list that was created by ArrayUnorderedList<Person> myList = new ArrayUnorderedList<Person>(); and then had items added to it… // Use iterator to display contents of list Iterator<Person> iter = myList.iterator();  while(iter.hasNext() ) {     System.out.println(iter.next()); } 

10 Using an Iterator in an Application
// Print just the addresses now // Note that we have to start a new iteration! iter = myList.iterator(); // start new iteration  while(iter.hasNext() ) { System.out.println(iter.next().get ()); }

11 C++ Iterators STL iterator’s value can represent 3 kinds of states:
Standard Template Library (STL) STL iterators generalize different uses of pointers STL iterator’s value can represent 3 kinds of states: Dereferenceable (points to a valid location in a range) Past the end (points just past last valid location in a range) A closed/open range: [start, end) Singular (points to nothing)

12 C++ Iterators (Cont’) Pointers and integers support iteration but not all collections are ordinal data structures. for (int * p = A; p – A < MAX; ++p) { cout << *p << endl; } for (unsigned int i = 0; i < MAX; ++i) { cout << A[i] << endl;

13 Models of C++ Iterators
Forward Iterator Linked-list style access (slist) hash_set<string>::iterator Bidirectional Iterator Bi-linked-list style access (list) list<int>::iterator set<string>::iterator Random Access Iterator Array/buffer style access (vector, deque) vector<int>::iterator

14 C++ Example using namespace std;
vector<int> V1; // Add some elements to V1 V1.push_back(1); V1.push_back(5); V1.push_back(7); for(int y=0; y<V1.size(); y++) { cout<<V1[y]; }

15 C++ Example (Cont’) vector<int>::iterator V1Iterator;
for(V1Iterator = V1.begin(); V1Iterator != V1.end(); V1Iterator++) { cout<<*V1Iterator; }

16 C++ Example (Cont’) the iterators associated with vectors are random access iterators so you could use arithmetic of the form Iterator + I vector<int> myIntVector; vector<int>::iterator myIntVectorIterator; myIntVectorIterator = myIntVector.begin() + 2;

17 Bidirectional Iterator
std::list<int> mylist; for (int i=1; i<=5; ++i) mylist.push_back(i); for (std::list<int>::reverse_iterator riter=mylist.rbegin(); riter!=mylist.rend(); ++riter) std::cout << *riter;

18 https://ideone.com/YsRGV4
Output Iterators  #include <iostream> // std::cout #include <iterator> // std::ostream_iterator #include <vector> // std::vector #include <algorithm> // std::copy int main () { std::vector<int> myvector; for (int i=1; i<10; ++i) myvector.push_back(i*10); std::ostream_iterator<int> out_it (std::cout,“ and "); std::copy ( myvector.begin(), myvector.end(), out_it ); return 0; }

19 Output Iterators #include <iostream> #include <vector>
#include <algorithm> #include <fstream> using namespace std; int main () { int ary[] = {2,5,7,2,8,9}; ofstream ofile("TEST.DAT"); // write to STDOUT copy(ary,ary+6,ostream_iterator<int>(cout," - ")); // write into file "TEST.DAT" copy(ary,ary+6,ostream_iterator<int>(ofile,"\n")); ofile.close(); cout << endl; return 0; }


Download ppt "Concepts of Programming Languages"

Similar presentations


Ads by Google