Homework 2: Templates and the standard library
Due: 4/6 12:30pm
Name & Perm #:
Homework buddy (leave blank if you worked alone):
Reading: "Templates and the STL", PS 8.3, 17, 18
1 (10 pts)
In the lecture, we talked about STL being a misnomer. STL was a historical predecessor of parts of the C++ standard library. Nowadays, we would refer to those parts by name. What are the four components of STL that are now part of the standard library?
2 (8 pts)
Suppose we have a C++ class called Student
. There are many ways one can create a collection Student
objects. Among these: one can use a normal C++ array or an STL vector
, and one could create a collection of objects, or of pointers to objects (presumably allocated on the heap.)
(2 pts) Write a line of C++ code that declares an array
a
that can hold 10 objects of typeStudent
.(2 pts) Write a line of C++ code that declares an array
b
that can hold 10 pointers to objects of typeStudent
.(2 pts) Write a line of C++ code that declares a standard library vector
c
that can hold 10 objects of typeStudent
.(2 pts) Write a line of C++ code that declares a standard library vector
d
that can hold 10 pointers to objects of typeStudent
.
3 (20 pts)
In the previous problem, you were asked to write four different declarations, 1, 2, 3, 4. Each of these has "pros" and "cons". There are also differences among them that we might describe as "neutral", for whether they are a pro/con depends on the context. For the "pros" and "cons" below, please indicate which of the options above (1, 2, 3, 4) the statement applies to. Note that in some cases, you may have to indicate more than one number.
Circle the numbers to which the statement applies. If you mess up, cross out all the letters and list the letters in the space to the right.
Hero or zero? | Choices |
---|---|
Con: Additional #include directives are required to use this approach. |
\( 1 \quad 2 \quad 3 \quad 4 \) |
Pro: The item declared can be expanded beyond 10 items if needed. | \( 1 \quad 2 \quad 3 \quad 4 \) |
Pro: You can declare this item without actually creating any Student objects. | \( 1 \quad 2 \quad 3 \quad 4 \) |
Con: The class MUST have a default constructor, or this declaration is not permitted. | \( 1 \quad 2 \quad 3 \quad 4 \) |
Pro: All space for the item and the Students it contains are co-located in memory–on the stack if the item is declared as a local. | \( 1 \quad 2 \quad 3 \quad 4 \) |
4 (3 pts)
In your own words, what is the "problem" for which "templates for functions" is a solution? I'm looking for a brief description–a single sentence, or at most 2-3 sentences that get to the central point, a description of the problem, not a detailed description of everything you know about templates, and certainly not a sentence copied, word-for-word, from either textbook.
5 (3 pts)
The C++ syntax for function templates includes template <class
Item>
. The name Item
in the example above is preceeded by the
keyword class
. One might infer from that that Item
should be
the name of some class
, e.g. class Student
, or class Roster
,
etc. But that is not a correct assumption. Explain
why briefly.
6 (6 pts)
Let's say you have a function int calc(int operand1, int operand2,
char op)
where op
is either +
or -
. Instead of overloading
this function for each numerical datatype in C++ (e.g. also defining
it for float
, double
, etc., you want to create a generic function
that is far more flexible. In the space below, define calc
as a
template function. If op is neither +
nor -
, print an error
message on std::cerr
and call the system function exit(1);
(you
may assume that #include <cstdlib>
has already been done.)Note
that once we've covered exceptions, that would be a better approach
than the cerr/exit
technique.
Footnotes:
Note
that once we've covered exceptions, that would be a better approach
than the cerr/exit
technique.