Overview | Schedule | Resources | Assignments | Home |
This exam is open-book and open-note. Please allow some time to check your work. If you need extra space, write on the back.
0 | 1 | 2 | 3 | 4 | 5 | 6 | |
input: | E | A | S | Y | O | N | E |
pass 1: | A | E | |||||
pass 2: | S | ||||||
pass 3: | Y | ||||||
pass 4: | O | S | Y | ||||
pass 5: | N | O | S | Y | |||
pass 6: | E | N | O | S | Y |
x
is declared as a stack<char>
?
x.push('h'); x.push('e'); x.push('l'); cout << x.top(); x.pop(); cout << x.top(); x.pop(); x.push('l'); x.push('o'); cout << x.top(); x.pop(); cout << x.top(); x.pop(); cout << x.top(); x.pop();
leolh
What would the output be from the same sequence if x
were
declared as a priority_queue<char>
(where characters later in
the alphabet have higher priority)?
lhole
Finally, what would the output be from the same sequence if x
were declared as a queue<char>
and the x.top()
operations
were replaced by x.front()
?
hello
int countBelow(const vector<int> &v, int n)
which will
return the number of items strictly less than n
found in the vector
v
. You should not assume anything about the ordering of the items
in the vector.
int countBelow(const vector<int> &v, int n) { int count = 0; for (int i = 0; i < v.size(); i++) { if (v[i] < n) count++; } return count; }Or, use the iterator version below, with the appropriate type changes.
list<int>
argument
instead of a vector<int>
.
int countBelow(const list<int> &v, int n) { int count = 0; for (list<int>::const_iterator it = v.begin(); it != v.end(); it++) { if (*it < n) count++; } return count; }
int a[N]
when N
is a million; instead, you can declare
a
to be an object of class test
, and the only space
required on the system stack will be for the data
pointer--the
million int
s will be allocated from the heap):
const int N = 1000000; class test { public: test() : data(new int[N]) { } test(const test& x); ~test(); test& operator=(const test& rhs); int& operator[](int i) { return data[i]; } const int& operator[](int i) const { return data[i]; } private: int *data; }; test::test(const test& x) : data(new int[N]) { for (int i = 0; i < N; i++) data[i] = x[i]; } test::~test() { // FINISH THIS:
delete[] data;
} test& test::operator=(const test& rhs) { // AND THIS:
for (int i = 0; i < N; i++) data[i] = rhs[i]; return *this;
}
What will be the output from the following program using this class?
void f(test x, test& y) { x[42] = 2 * y[42]; y = x; } int main() { test a; a[42] = 17; test b = a; f(a, b); cout << a[42] << " " << b[42] << endl; }
17 34
How many times will the test
destructor be called in the above
program?
a
and b
at the end of main
, and once for x
(which was passed
a copy of a
) at the end of f
.Overview | Schedule | Resources | Assignments | Home |
DePauw University,
Computer Science Department,
Fall 2006
Maintained by Brian Howard
(bhoward@depauw.edu
).
Last updated