CPP : C++ Certified Professional Programmer : Part 08

  1. What happens when you attempt to compile and run the following code?

    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) { out<<val<<” “; } };

    int main() {
    int t1[]={3,2,4,1,5};
    int t2[]={6,10,8,7,9};
    vector<int> v1(10);
    sort(t1, t1+5); sort(t2, t2+5);
    copy(t1,t1+5,v1.begin());
    copy(t2,t2+5,v1.begin()+5);
    merge(v1.begin(), v1.begin()+5,v1.end());
    for_each(v1.begin(), v1.end(), Out<int>(cout));cout<<endl;
    return 0;
    }

    Program outputs:

    • 1 2 3 4 5 6 10 8 7 9
    • 3 2 4 1 5 6 7 8 9 10
    • 3 2 4 1 5 6 10 8 7 9
    • 1 2 3 4 5 6 7 8 9 10
    • compilation error
  2. What will happen when you attempt to compile and run the code below, assuming that file test.in contains the following sequence: 1 2 3?

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <list>
    #include <algorithm>
    using namespace std;
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) {out<<val<<” “; } };

    int main () {
    ifstream f(“test.in”);
    list<int> l;
    for( ; !f.fail() ; ) {
    int i;
    f>>i;
    l.push_back(i);
    }
    f.close();
    for_each(l.begin(), l.end(), Out<int>(cout));
    return 0;
    }

    Programwill output:

    • 1 2 3
    • 1 2 3 3
    • no output
    • compilation error
    • program runs forever without output
  3. What happens when you attempt to compile and run the following code?

    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    class B { int val;
    public:
    B(int v=0):val(v){}
    int getV() const {return val;}
    operator int () const { return val;} };
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) { out<<val<<” “; } };

    struct Add {
    B operator()(B & a, B & b) { return a+b; }};
    int main() {
    int t[]={1,2,3,4,5,6,7,8,9,10};
    vector<B> v1(t, t+10);
    vector<B> v2(10);
    transform(v1.begin(), v1.end(), v2.begin(), bind1st(1,Add()));
    for_each(v2.rbegin(), v2.rend(), Out<B>(cout));cout<<endl;
    return 0;
    }

    Program outputs:

    • 1 2 3 4 5 6 7 8 9 10
    • 2 3 4 5 6 7 8 9 10 11
    • 10 9 8 7 6 5 4 3 2 1
    • 11 10 9 8 7 6 5 4 3 2
    • compilation error
  4. What happens when you attempt to compile and run the following code?

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;

    void myfunction(int i) {
    cout << ” ” << i;
    }
    void multiply (int a) {
    a*2;
    }

    int main() {
    int t[] = { 10, 5, 9, 6, 2, 4, 7, 8, 3, 1 };
    vector<int> v1(t, t+10);
    for_each(v1.begin(), v1.end(), multiply);
    iter_swap(v1.begin(),t+9);
    for_each(v1.begin(), v1.end(), myfunction);
    return 0;
    }

    Program outputs:

    • 1 5 9 6 2 4 7 8 3 1
    • compilation error
    • 1 2 3 4 5 6 7 8 9 10
    • 10 9 8 7 6 5 4 3 2 1
    • 10 5 9 6 2 4 7 8 3 1
  5. Which sentence is correct about the code below?

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    class A {
    int a;
    public:
    A(int a) : a(a) {}
    int getA() const { return a; }
    void setA(int a) { this?>a = a; }
    /* Insert Code Here */
    };

    struct add10 { void operator()(A & a) { a.setA(a.getA() + 10); } };

    int main() {
    int t[] = { 10, 5, 9, 6, 2, 4, 7, 8, 3, 1 };
    vector<A> v1(t, t + 10);
    for_each(v1.begin(), v1.end(), add10());
    vector<A>::iterator it = find(v1.begin(), v1.end(), A(7));
    cout << it?>getA() << endl;
    return 0;
    }

    • it will compile and print 7
    • it will not compile
    • it will compile but the program result is unpredictable
    • adding code:
      bool operator !=(const A & b) const {
      if (this?>a != b.a) { return true; } return false; }
      at Place 1 will allow the program to compile
  6. What happens when you attempt to compile and run the following code?

    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    class B { int val;
    public:
    B(int v):val(v){}
    int getV() const {return val;} bool operator < (const B & v) const { return val<v.val;} };
    ostream & operator <<(ostream & out, const B & v) { out<<v.getV(); return out;}

    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) { out<<val<<” “; } };

    int main() {
    B t1[]={3,2,4,1,5};
    B t2[]={6,10,8,7,9};
    vector<B> v1(10);
    sort(t1, t1+5);
    sort(t2, t2+5);
    merge(t1,t1+5,t2,t2+5,v1.begin());
    for_each(v1.begin(), v1.end(), Out<B>(cout));cout<<endl;
    return 0;
    }

    Program outputs:

    • 1 2 3 4 5 6 10 8 7 9
    • 3 2 4 1 5 6 7 8 9 10
    • 3 2 4 1 5 6 10 8 7 9
    • 1 2 3 4 5 6 7 8 9 10
    • compilation error
  7. What happens when you attempt to compile and run the following code?

    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) { out<<val<<” “; } };

    int main() {
    int t[]={3,2,4,1,5,10,9,7,8,6};
    vector<int> v1(t,t+10);
    cout<<*max_element(v1.begin(), v1.end());
    return 0;
    }

    Program outputs:

    • 3
    • 1
    • 6
    • 10
    • compilation error
  8. What happens when you attempt to compile and run the following code?

    #include <iostream>
    #include <algorithm>
    #include <map>
    using namespace std;

    int main() {
    int t[] = { 10, 5, 9, 6, 2, 4, 7, 8, 3, 1 };
    map<int, int> m;
    for(int i=0; i < 10; i++) {
    m[i]=t[i];
    }
    pair<const int,int> p(5,5);
    map<int, int>::iterator it = find(m.begin(), m.end(), p);
    if (it != m.end())
    {
    cout<<it?>first<<endl;
    }
    else
    {
    cout<<“Not found!\n”;
    }
    return 0;
    }

    Program outputs:

    • 5
    • Not found!
    • 10
    • compilation error
  9. What happens when you attempt to compile and run the following code?

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <deque>
    #include <set>
    using namespace std;

    void myfunction(int i) {
    cout << ” ” << i;
    }

    int main() {
    int t[] = { 10, 5, 9, 6, 2, 4, 7, 8, 3, 1 };
    vector<int> v1(t, t + 10);
    deque<int> d1(t, t + 10);
    set<int> s1(t, t + 10);

    for_each(v1.begin(), v1.end(), myfunction); // Line I

    for_each(d1.begin(), d1.end(), myfunction); // Line II

    for_each(s1.begin(), s1.end(), myfunction); // Line III
    return 0;
    }

    • program outputs: 10 5 9 6 2 4 7 8 3 1 10 5 9 6 2 4 7 8 3 1 1 2 3 4 5 6 7 8 9 10
    • program outputs: 10 5 9 6 2 4 7 8 3 1 10 5 9 6 2 4 7 8 3 1 10 5 9 6 2 4 7 8 3 1
    • program outputs: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
    • compilation error in line I
    • compilation error in line III
  10. What happens when you attempt to compile and run the following code?

    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) { out<<val<<” “; } };

    int main() {
    int t1[]={3,2,4,1,5};
    int t2[]={5,6,8,2,1};
    vector<int> v1(10);
    sort(t1, t1+5);
    sort(t2, t2+5);
    set_intersection(t1,t1+5,t2,t2+5,v1.begin());
    for_each(v1.begin(), v1.end(), Out<int>(cout));cout<<endl;
    return 0;
    }

    Program outputs:

    • compilation error
    • 1 2 3 4 5 6 8 0 0 0
    • 1 2 3 4 5 6 8 2 1 0
    • 1 1 2 2 3 4 5 5 6 8
    • 1 2 5 0 0 0 0 0 0 0
  11. What happens when you attempt to compile and run the following code?

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <list>
    #include <algorithm>
    #include <iomanip>
    using namespace std;
    class B { int val;
    public:
    B(int v=0):val(v){}
    int getV() const {return val;}
    operator int() const { return val; };};

    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) {out<<setw(3)<<hex<<val; } };

    int main () {
    int t[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    fstream f(“test.out”, ios::trunc|ios::out);
    list<B> l(t, t+10);
    for_each(l.begin(), l.end(), Out<B>(f));
    f.close();
    f.open(“test.out”);
    for( ; f.good() ; ) {
    B i;
    f>>i;
    cout<<i<<” “;
    }
    f.close();
    return 0;
    }

    • file test.out will be opened writing
    • file test.out will be truncated
    • file test.out will be opened for reading
    • compilation error
    • program will display sequence 1 2 3 4 5 6 7 8 9 10
  12. What happens when you attempt to compile and run the following code?

    #include <vector>
    #include <iostream>
    #include <algorithm>

    using namespace std;
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator()(const T & val ) {
    out<<val<<” “;
    }
    };
    struct Sequence {
    int start;
    Sequence(int start):start(start){}
    int operator()() {
    return start++ ; }};
    int main() {
    vector<int> v1(10);
    generate(v1.rbegin(), v1.rend(), Sequence(1));
    rotate(v1.begin(),v1.begin() + 1, v1.end() );
    for_each(v1.begin(), v1.end(), Out<int>(cout) );cout<<endl;
    return 0;
    }

    Program outputs:

    • 1 2 3 4 5 6 7 8 9 10
    • 10 9 8 7 6 5 4 3 2 1
    • 9 8 7 6 5 4 3 2 1 10
    • 1 10 9 8 7 6 5 4 3 2
  13. What happens when you attempt to compile and run the following code?

    #include <iostream>
    #include <set>
    #include <vector>
    using namespace std;
    int main(){
    int t[] ={ 3, 4, 2, 1, 6, 5, 7, 9, 8, 0 };
    vector<int>v(t, t+10);
    multiset<int> s1(v.begin(),v.end());
    s1.insert(v.begin(),v.end());
    pair<multiset<int>::iterator,multiset<int>::iterator> range;
    range = s1.equal_range(6);
    while (range.first != range.second) {
    cout<<*range.first<<” “; range.first++;
    }
    return 0;
    }

    • program outputs: 6 6
    • program outputs: 5 7
    • program outputs: 5 5 6 6 7 7
    • program outputs: 5 5 7 7
    • program outputs: 1 1 6 6 5 5
  14. What will happen when you attempt to compile and run the code below, assuming that you enter the following sequence: one two three<enter>?

    #include <iostream>
    #include <string>
    using namespace std;

    int main ()
    {
    string a;
    cin>>a;
    cout<<a<<endl;
    return 0;
    }

    Program will output:

    • one
    • one two three
    • runtime exception
    • compilation error
    • the result is unspecified
  15. What happens when you attempt to compile and run the following code?

    #include <list>
    #include <vector>
    #include <iostream>
    using namespace std;
    int main ()
    {
    int t[] = {1, 2 ,3 ,4 ,5};
    vector<int>v1(t, t+5);
    list<int>l1;
    l1.assign(v1.end(), v1.begin());
    for(int i=0; i<l1.size(); i++)
    {
    cout<<l1.at(i)<<” “;
    }
    cout<<endl;
    return 0;
    }

    • program displays 5 4 3 2 1
    • program displays 1 2 3 4 5
    • compilation error 
    • segmentation fault runtime exception
  16. What happens when you attempt to compile and run the following code?

    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    class B { int val;
    public:
    B(int v):val(v){}
    int getV() const {return val;} bool operator < (const B & v) const { return val>v.val;} };
    ostream & operator <<(ostream & out, const B & v) { out<<v.getV(); return out;}
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) { out<<val<<” “; } };

    int main() {
    B t1[]={3,2,4,1,5};
    B t2[]={5,6,8,2,1};
    vector<B> v1(10,0);
    sort(t1, t1+5);
    sort(t2, t2+5);
    set_intersection(t1,t1+5,t2,t2+5,v1.begin());
    for_each(v1.begin(), v1.end(), Out<B>(cout));cout<<endl;
    return 0;
    }

    Program outputs:

    • compilation error
    • 1 2 3 4 5 6 8 0 0 0
    • 1 2 3 4 5 6 8 2 1 0
    • 5 2 1 0 0 0 0 0 0 0
    • 1 2 5 0 0 0 0 0 0 0
  17. What will happen when you attempt to compile and run the following code?

    #include <iostream>
    #include <map>
    #include <vector>
    #include <sstream>
    #include <string>
    using namespace std;
    int main() {
    int t[] = { 3, 4, 2, 1, 0, 3, 4, 1, 2, 0 };
    vector<int> v(t, t + 10);
    multimap<int, string> m;
    for (vector<int>::iterator i = v.begin(); i != v.end(); i++) {
    stringstream s;s << *i << *i;
    m.insert(pair<int, string>(*i, s.str()));
    }
    pair<multimap<int, string>::iterator, multimap<int, string>::iterator> range;
    range = m.equal_range(2);
    for (multimap<int, string>::iterator i = range.first; i != range.second; i++) {
    cout << i?>first << ” “;
    }
    return 0;
    }

    The output will be:

    • 2 2
    • 1 2
    • 1 3
    • 2
    • 0 2
  18. What happens when you attempt to compile and run the following code?

    #include <deque>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    class B { int val;
    public:
    B(int v):val(v){}
    int getV() const {return val;} bool operator < (const B & v) const { return val<v.val;} };
    ostream & operator <<(ostream & out, const B & v) { out<<v.getV(); return out;}
    template<class T>struct Out {
    ostream & out;
    Out(ostream & o): out(o){}
    void operator() (const T & val ) { out<<val<<” “; } };
    int main() {
    int t[]={8, 10, 5, 1, 4, 6, 2, 7, 9, 3};
    deque<B> d1(t, t+10);
    sort(d1.begin(), d1.end());
    deque<B>::iterator it = upper_bound(d1.begin(), d1.end(), B(4), greater<B>());
    for_each(it, d1.end(), Out<B>(cout)); cout<<endl;
    return 0;
    }

    Program outputs:

    • 5 6 7 8 9 10
    • 4 5 6 7 8 9 10
    • compilation error
    • 1 2 3 4 5
    • 1 2 3 4
  19. What happens when you attempt to compile and run the following code?

    #include <iostream>
    #include <map>
    using namespace std;
    int main() {
    int t[] = { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 };
    string s[] = { “one”, “one”, “two”, “two”, “three”,”three”, “four”, “four”, “five”, “five”};
    map<int, string> m;
    for (int i = 0; i < 10; i++) {
    m.push_back(pair<int, string>(t[i], s[i]));
    }

    for (map<int, string>::iterator i = m.begin(); i != m.end(); i++) {
    cout << i?>first << ” “;
    }
    return 0;
    }

    • program outputs: 1 2 3 4 5
    • compilation error
    • program outputs: 1 1 2 2 3 3 4 4 5 5
    • program outputs: one two three four five
    • program outputs: one one two two three three four four five five
  20. What happens when you attempt to compile and run the following code?

    #include <iostream>
    #include <set>
    #include <vector>
    using namespace std;
    template<class T> void print(T start, T end) {
    while (start != end) {
    std::cout << *start << ” “; start++;
    }
    }
    int main(){
    vector<int>v;
    multiset<int> s;
    for(int i=10; i>0; i??) {
    v.push_back(i); s.push_back(i);
    }
    print(v.begin(), v.end()); print(s.begin(), s.end());cout<<endl;
    return 0;
    }

    • program outputs: 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10
    • program outputs: 10 9 8 7 6 5 4 3 2 1 10 9 8 7 6 5 4 3 2 1
    • program outputs: 10 9 8 7 6 5 4 3 2 1 and unpredictable sequence of numbers range 1 to 10
    • compilation error