CS62  Spring 2010  Lecture 23
big3 exercise
administrative
 CS senior presentations this week:
Thursday 4:156pm
Friday 3:305:30pm
in Edmunds 101 (down the hall)
 Preregistration pizza on Thursday at 6pm
 Lab Wednesday is optional and will be a work session for this week's homework
file streams
 ofstream fout(filename.c_str());
 ifstream fin(filenmae.c_str());
destructors
 Anything wrong with doing the following in Java?
Vector v = new Vector();
v = new Vector();
 nope
 functionally everything works fine. v now points to a new Vector object on the heap
 eventually, the garbage collector will notice that the original Vector object is free and reclaim it
 when can an object be garbage collected?
 when there are no references remaining to that object
 what about in C++?
vector<int>* v = new vector<int>;
v = new vector<int>;
 functionally, everything works fine
 the problem, is that C++ is not garbage collected
 we now have a chunk of memory that we cannot access, but also cannot reuse
 in C++ we need to explicitly tell the memory manager that we're done with that memory
 the "delete" command does this:
vector<int>* v = new vector<int>;
delete v;
v = new vector<int>;
 we told the memory manager that we don't need the memory allocated to the first object
 objects can be very complicated. how does the memory manager know what memory to free up?
 the destructor: one final method that the compiler provides a default implementation for:
~MyClass()
(opposite of the constructor)
 the destuctor is called when an object is no longer needed
 when a variable's scope is disappearing
 for example, a local variable when we return from a method
 when the programmer explicitly calls delete on an object
 what do you think the default behavior for the destructor is?
 recursively calls delete on all of the member variables
 doesn't matter for builtin types
look at the clear() method in
linkedlist.cpp code
 any problems with this?
 we're not cleaning up our memory!
 look at clear() method in
linkedlistimproved.cpp code
 recursively removing elements from the list until it's empty
 are we done?
 still haven't actually called delete on any of the nodes to free them up
 how would we do that?
 look at removeFirst() method in linkedlist.cpp
 how would we change it to appropriately "delete" objects
 look at removeFirst() method in
linkedlistimproved.cpp code
memory management
 in general, everytime you create an object on the heap using "new" you should make sure that you're calling delete appropriately somewhere else in your code
 memory management is hard!
 pitfalls
 memory leak (forgetting to delete an object)
 deleting memory before it's actually freed up
vector<int>* v = new vector<int>;
vector<int>* v2 = v;
delete v;
v2>push_back(10);
 double deleting memory
vector<int>* v = new vector<int>;
vector<int>* v2 = v;
delete v;
delete v2;
operator overloading
 we saw how to overload the = operator
 in general, you can overload almost any operator (there are a few exceptions, though)
 basic steps:
 add the appropriate function header for the operator
 the function names all start with "operator" followed by the actual operator
 you just have to get the number of arguments and the return type correct, but you should be able to figure it out

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
 add the function definition to the .cpp file
 make sure you konw what you're doing, since operators are important :)
 look at operator[] overload in the linked list lcass in
linkedlistfinal.cpp code
 int& LinkedList::operator[](unsigned int index)
 overriding the [] operator of the LinkedList class
 why an unsigned in?
 can't have negative indices
 why the int& return typ?
 out linked list is storing ints
 it needs to be returnby reference and not value, so we can do things like:
LinkedList l;
...
l[4] = 7;
and actually have it change the dataq. Since the int returned from the operator method is the SAME as the one we're modifying in the statement. Make sure you understand this distinction!
graphs
 A graph is a set of vertices (or nodes) V and a set of edges (u,v) in E where u, v are in V
 there are different types of graphs (show some examples)
 undirected
 if an edge (u, v) exists (that is u is connected to v) then (v, u) also exits, that is, v is connected to u
 when drawn, we'd draw the edge between u and v as a line
 directed
 edges have a direction, that is, u may be connected to v, but not necessarily vice versa
 when drawn, we'd draw the edge from u to v as an "arrow"
 weighted
 each graph edge has an associated weight
 can have either weighted, undirected graphs or weighted, directed graphs
 graph terminology
 path
 a path is a list of vertices p_1, p_2, ..., p_k where there exists an edge (p_i, p_{i+1}) in E
 intuititvely, it's a connection of edges
 a "simple" path is a path where all edges are unique
 cycle
 a simple path with p_1 = p_k
 look at cycles in directed and undirected graphs
 a graph is called "acyclic" if it doesn't have any cycles in it
 connected
 a graph is connected if every pair of vertices is connected by a path
 for directed graphs, this is called "strongly connected"
 "weakly connected"?
 if replacing all of the directed edges with undirected edges leaves a connected graph
 where have we seen graphs in this class already?
 tree
 undirected
 acyclic
 note that we have to specify a root
 some other special cases
 twig
 ring
 complete graph
 an edge exists between every node
 bipartite graph
 a graph where every vertex can be partitioned into two disjoint sets X and Y, such that all edges connect a vertex u in X to a vertex v in Y
 what are some questions we might want to ask about graphs?
 does it have a cycle?
 is it connected? strongly connected? weakly connected?
 is there a path from a to b?
 what is the shortest path from a to b?
 do graphs have the same structure (these are called isomorphic graphs)?
 where do graphs come up in real life?
 transportation networks (flights, roads, etc.)
 flights
 directed or undirected?
 weighted?
 what are the weights?
 google maps
 directed or undirected
 weighted?
 what are the weights?
 communication networks
 computer networks
 phone networks
 web
 what are the vertices and edges?
 vertices are web pages
 edges are links
 social networks
 what are the vertices and edges?
 vertices are people
 edges are relationships (e.g. friends on facebook)
 circuit design
 bayesian networks