Thinking in C++ Vol 2 - Practical Programming |
Prev |
Home |
Next |
Solutions
to selected exercises can be found in the electronic document The Thinking
in C++ Volume 2 Annotated Solution Guide, available for a small fee from www.MindView.net.
1. Create a set<char>, open a file (whose name is
provided on the command line), and read that file in a char at a time,
placing each char in the set. Print the results, and observe the
organization. Are there any letters in the alphabet that are not used in that
particular file?
2. Create three sequences of Noisy objects, a vector, deque,
and list. Sort them. Now write a function template to receive the vector
and deque sequences as a parameter to sort them and record the sorting
time. Write a specialized template function to do the same for list
(ensure to call its member sort( ) instead of the generic
algorithm). Compare the performance of the different sequence types.
3. Write a program to compare the speed of sorting a list using list::sort( )
vs. using std::sort( ) (the STL algorithm version of sort( )).
4. Create a generator that produces random int values between
0 and 20 inclusive, and use it to fill a multiset<int>. Count the
occurrences of each value, following the example given in MultiSetWordCount.cpp.
5. Change StlShape.cpp so that it uses a deque instead
of a vector.
6. Modify Reversible.cpp so it works with deque and list
instead of vector.
7. Use a stack<int> and populate it with a Fibonacci
sequence. The program s command line should take the number of Fibonacci
elements desired, and you should have a loop that looks at the last two
elements on the stack and pushes a new one for every pass through the loop.
8. Using only three stacks (source, sorted, and
losers), sort a random sequence of numbers by first placing the numbers on
the source stack. Assume the number on the top of the source is
the largest, and push it on the sorted stack. Continue to pop the source
stack comparing it with the top of the sorted stack. Whichever number is
the smallest, pop it from its stack and push it onto the on the losers
stack. Once the source stack is empty, repeat the process using the losers
stack as the source stack, and use the source stack as the losers
stack. The algorithm completes when all the numbers have been placed into the winners
stack.
9. Open a text file whose name is provided on the command line. Read
the file a word at a time, and use a multiset<string> to create a
word count for each word.
10. Modify WordCount.cpp so that it uses insert( )
instead of operator[ ] to insert elements in the map.
11. Create a class that has an operator< and an ostream&
operator<<. The class should contain a priority number. Create a
generator for your class that makes a random priority number. Fill a priority_queue
using your generator, and then pull the elements out to show they are in the
proper order.
12. Rewrite Ring.cpp so it uses a deque instead of a list
for its underlying implementation.
13. Modify Ring.cpp so that the underlying implementation can
be chosen using a template argument. (Let that template argument default to list.)
14. Create an iterator class called BitBucket that just
absorbs whatever you send to it without writing it anywhere.
15. Create a kind of hangman game. Create a class that contains a char
and a bool to indicate whether that char has been guessed yet.
Randomly select a word from a file, and read it into a vector of your
new type. Repeatedly ask the user for a character guess, and after each guess,
display the characters in the word that have been guessed, and display
underscores for the characters that haven t. Allow a way for the user to guess
the whole word. Decrement a value for each guess, and if the user can get the
whole word before the value goes to zero, they win.
16. Open a file and read it into a single string. Turn the string
into a stringstream. Read tokens from the stringstream into a list<string>
using a TokenIterator.
17. Compare the performance of stack based on whether it is
implemented with vector, deque, or list.
18. Create a template that implements a singly-linked list called SList.
Provide a default constructor and begin( ) and end( )
functions (via an appropriate nested iterator), insert( ), erase( )
and a destructor.
19. Generate a sequence of random integers, storing them into an
array of int. Initialize a valarray<int> with its contents.
Compute the sum, minimum value, maximum value, average, and median of the
integers using valarray operations.
20. Create a valarray<int> with 12 random values. Create
another valarray<int> with 20 random values. You will interpret
the first valarray as a 3 x 4 matrix of ints and the second as a
4 x 5 matrix of ints, and multiply them by the rules of matrix
multiplication. Store the result in a valarray<int> of size 15,
representing the 3 x 5 result matrix. Use slices to multiply the rows of the
first matrix time the columns of the second. Print the result in rectangular
matrix form.