lists101
Ch9.1-9.3	Using Lists
Objectives:
	To be able to recall the names of list operations and algorithms.
	To be able to recall the prototypes/headers for list operations and
		algorithms.
	Given the name or symbol of  a list operation describe its purpose.
	To be able solve problems and code functions by using the C++ list
	and algorithm library -- when such code is simple (less than about 10 
	lines).
	To be able to predict the O() performance of standard list 
		operations/algorithms.

From the Book
  http://ftp.csci.csusb.edu/dick/cs330/Slides/ch09slide.pdf

Vectors are not lists!
  http://ftp.csci.csusb.edu/dick/cs330/Slides/ch09lists.gif

Linked two way lists

p188: list of list  operations and list::iterator operations.
	postit notes!
    MUST use iterators instead of indices!
	Many iterators moving in parallel or at different speeds.
	The moving finger writes and moves on....
    INSERTING in the middle.

    DANGER: after erase(p);
	 p is invalid, do not use p.
		reset it:  p=...;
    Tend to copy an iterator and move it to safety.

    Also lists have <algorithm> operations from p174!

p191: extra error with new standard count
    num = count(....)

pp191-193.  Iterators vs inserters
When using any standard algorithms in <algorithm> -- for example 'copy'.
  To overwrite existing items use an iterator to mark the target.
  To add new items use an inserter.
       back_inserter(container) -- ok for vectors, deques, lists
      front_inserter(container) -- ok for deques and lists
     inserter(container, iterator) -- ok for lists and sets.   

Vectors are not lists or are they?
Exercise: compare page 188 with page 170

Exercise:  redo ex2 from ch08 using a list of strings
instead of a vector of strings:
Last class we did:
     string join(vector<string>& values, string & separator);
  http://ftp.csci.csusb.edu/dick/cs330/SourceCode/join.cpp
Now do:
     string join(list<string>& values, string & separator);


insert iterators:  magic.

9.3.1: widgets ... slide
  http://ftp.csci.csusb.edu/dick/cs330/Slides/ch09widgets.gif
9.3.2 registration... slide
  http://ftp.csci.csusb.edu/dick/cs330/Slides/ch09registration.gif

AGAIN: when you erase don't touch it.

Questions?

Vectors are not lists -- again!
   http://ftp.csci.csusb.edu/dick/cs330/Slides/ch09splicinglists.txt

Exercises:
  Ex 8 on page 215.
   template <class T> list<T> append( list<T>, list<T> );

  Study Questions 1..9 from p215.

next implementing lists - ch9.4...
Prepare
  review pointers.
  Look in cs330/links.html for pointer pointers.
  Study book 9.4 to end of chapter 9.
  Study Qns 11..18 page 215.
   Do Qn 10 by Drawing an UML diagram of the classes, pointers, and components
	on pages 203..207 (no operators or attributes).