| 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 ints 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