Week 7 - Templates
Learning objectives
Upon finishing this week, you should be able to:
- Create and use generic functions using templates
- Create and use generic array-based data structures
Suggested pacing
Day 1
- Templates Intro
- CPPLab Templated Functions
Day 2
- Templated container classes
Day 3
- Vectors & Iterators
- CPPLab Vector Basics
Day 4
- Regular Expressions
Online Activity Outline
Templates Intro
Read 12.1-12.3
Watch this video on working with templates
CPPLab Templated Functions
Templated Array Based Container Classes
Read 12.4-12.5. Note we are going to come back to 12.6/12.7 later - but feel free to peek at them now. The ArrayList sample code I show in the video below is essentially a simplified version of vector.
Watch these videos on the book Stack class and the ArrayList class you can find in the Github repository. Building a similar container class is your project this week.
Vectors & Iterators
The idea of an "ArrayList" is an important one. Programmers often need a way to store a "list" of items in a structure that is easier to work with than a low-level array.
Rather than each programmer building their own version of an "ArrayList", there is a standard one provided with the C++ standard libraries. It is called a vector. Think of vector as the industrial grade version of the simple ArrayList we just looked at. Under the hood it uses most of the same tricks our basic ArrayList did.
Read 12.6-12.7 and watch this video for the basics of their use:
One of the tricky bits for vectors is how we specify locations within them. We often don't use numeric indexes, instead we use something called an iterator - a special object that keeps track of a location.
Read Liang Ch 22.3, you can skim once you get to 22.3.1 - don't worry about memorizing every detail. Also read 22.4. This video is an overview:
Do the Vector Basics CPP Lab.
Regular Expressions
Regular expressions don't really relate to anything else from this week, but they are an invaluable tool for searching and modifying strings - they are the go to tool of programmers who need to search and extract information from big text files.
To learn about regular expressions, check out the video below and then do the activities in the Regular Expression worksheet (see Files in elearn)
You may see a couple of quiz questions that deal with simple regexes. But you are NOT expected to master all the syntax and you do NOT have to write any C++ code to work with regexes. (We are just shooting for awareness on this topic.)
If you are interested, there is a project provided in the cs162Code repository (check the Extras folder) that you can check out to see regexes in action.
Regex Tools and References
Optional Extras
Check out Boost::Units
Template based programming is responsible for some of the coolest "tricks" possible in C++. Boost is an open source library of C++ code - most of which involves templates. Boost::Units provides a way to use templates to check dimensional analysis at compile time. If you just store different units all as doubles, there is no way for the compiler to catch errors like myArea = length + width. Boost::units gives explicit templated types to those ideas. For more details, you can read the Boost::units quick start.