1 / 23

CS 403: Programming Languages

CS 403: Programming Languages. Lecture 24 Fall 2003 Department of Computer Science University of Alabama Joel Jones. Overview. Announcements Talk today Colloquim tomorrow at 11AM in Houser 108, Jiageng Li, University of Alabama, Integrated Authorization for Grid System Environments

taracarter
Download Presentation

CS 403: Programming Languages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS 403: Programming Languages Lecture 24 Fall 2003 Department of Computer Science University of Alabama Joel Jones

  2. Overview • Announcements • Talk today • Colloquim tomorrow at 11AM in Houser 108, Jiageng Li, University of Alabama, Integrated Authorization for Grid System Environments • Review Session next class • Study Guide • MP3 questions • Evaluation Forms • The STL from a comparative programming language standpoint

  3. The Computer Science Department, CS Advisory Board,andACM Student Chapterpresent Mike ThomasCIO, Gulf States Paper “Computer Science in Heterogenous, Multidimensional Business Environments” 5:00-6:00 PM, Tuesday, Dec. 2nd, EE 119 Pizza & drinks served.

  4. Collections • Almost all programming languages support aggregations of primitive types in some way • C has structs, unions, arrays Pair Up: What way of aggregating does Smalltak have? What way of aggregating does Scheme have?

  5. Closures and aggregation • Aggregation is just a simple data type mechanism—what else is needed to have concise powerful? • A lower syntactic overhead way of specifying new behavior that works over an aggregate data structure • Smalltalk: myCollection do: [ code ] • Scheme: (map myList (lambda code )) • Works because the language provides a way of specifying functions “in-place”

  6. C++ Templates • Parameterized data types • Type-safe macros • Come in two types • Class Templates • Function Templates

  7. Class Templates • Can specialize with class (see listing #1) • template <class T> class Stack… • Stack<class Message> • Or any other type • Stack<int>

  8. Class Template Member Functions • Method body must be in .h file

  9. Using a Class Template • See listing #2 • What is the output?

  10. Function Templates • Specialize a function to take polymorphic arguments • Template <class T> T max(T a, T b) • But be careful with pointer types… • See listing #3 • What does it print?

  11. Template Function Specialization • To fix “problem”, use type-specific version: • template<> char* max(char* a, char* b){ return strcmp(a, b) > 0 ? a : b; }

  12. Standard Template Library (STL) • Good reference at: • http://www.sgi.com/tech/stl/ • Generic Programming • specify algorithms and data structures that work with any data type • Core Components • Containers • Algorithms • Iterators

  13. STL: Containers • Data structures that manage a set of memory locations • Doesn’t contain many member functions • Creating, copying, destroying, adding, removing • No pointers to elements • Algorithms do the “day-to-day” stuff

  14. STL: Iterators • Used to traverse elements of containers • Uniform set/naming across containers • Algorithms designed to work with a particular iterator category Random Access Bi-Directional Forward Output Input

  15. STL: Algorithms • Decoupled from containers • Parameterized by iterator types • Algorithm categories: • Non-mutating sequence operations • Mutating sequence operations • Searching and Sorting • Set Operations • Heap operations • Numeric operations • Miscellaneous

  16. Orthogonal Component Structure • So how does this all work together? • vector<int> v(3);v[0] = 7;v[1] = v[0] + 3;v[2] = v[0] + v[1];reverse(v.begin(), v.end()); • So what kind of components are v, v.begin(), and reverse? Algorithm Iterator Container

  17. Example STL: deque • Double-Ended QUEue • Supports: • Random access to elements • Constant time insertion & removal of elements @ end • Linear time insertion and removal of elements in the middle • Constant time insertion & removal of elements @ beginning • What role would the template parameter to deque fulfill?

  18. Example STL: deque • Use: • deque<int> Q;Q.push_back(3);Q.push_front(1);Q.insert(Q.begin() + 1, 2);Q[2] = 0;copy(Q.begin(), Q.end(), ostream_iterator<int>(cout, “ “)); • What does this do?

  19. Example STL: stack<T, Sequence> • Adaptor that supports restricted subset of Container functionality • Insertion, removal, and inspection of element at the top of the stack • Does not allow iteration through its elements

  20. Example STL:stack<T, Sequence> • Example use: • int main() { stack<int> S; S.push(8); S.push(7); S.push(4); assert(S.size() == 3); assert(S.top() == 4); S.pop(); assert(S.top() == 7); S.pop(); assert(S.top() ==8); S.pop(); assert(S.empty());}

  21. Containers • Sequences • vector, deque, list, slist, bit_vector • Associative Containers • set, map, multiset, multimap, hash_set, hash_map, hash_multiset, hash_multimap, hash • String package • char_traits, basic_string, rope (not STL) • Container adaptors • stack, queue, priority_queue, bitset

  22. Algorithms • Non-mutating algorithms • for_each, find,, count, mismatch, equal, search • Mutating algorithms • copy, swap, transform, replace, fill, generate, remove, unique, reverse, rotate, random_shuffle, random_sample, partition, stable_partition, sorting, nth_element, binary search, merge, set operations heap operations, min and max, lexicographical_compare, permutations • Generalized numeric algorithms • iota, accumulate, inner_product, partial_sum, adjacent_difference, power

  23. Iterators • Iterator classes • istream_iterator • ostream_iterator • front_insert_iterator • back_insert_iterator • insert_iterator • reverse_iterator • reverse_bidirectional_iterator • raw_storage_iterator • sequence_buffer

More Related