Except for the use of iterators, the following code test the functions that are
ID: 3825235 • Letter: E
Question
Except for the use of iterators, the following code test the functions that are common to all STL containers. Get rid of the hidden rich code and run it. Since STL “list” (implemented using doubly-linked list) is a sequence container, it should also work for STL vector (implemented using dynamic array). You will convert the code to test STL vector instead, and determine if there is any differences. Copy and paste your code with the screenshots down below:
#include <list>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
/*** Test common functions of containers ***/
//default constructor
list<int> myList1;
//Get an appropriate iterator for myList1
list<int>::iterator iter1 = myList1.begin();
//insert(pos, elem), 'pos' is an iterator
myList1.insert(iter1, 111);
myList1.insert(iter1, 222);
myList1.insert(iter1, 333);
//copy constructor
list<int> myList2(myList1);
//Get an appropriate iterator for myList1
list<int>::iterator iter2 = myList2.begin();
//erase(begin, end)
myList2.erase(++iter2, myList2.end());
//empty( )
cout << boolalpha;
if (!myList1.empty()) cout << "myList1.empty() returns: " << myList1.empty() << endl;
//size( )
if (!myList1.empty()) cout << "myList1.size() returns: " << myList1.size() << endl;
if (!myList2.empty()) cout << "myList2.size() returns: " << myList2.size() << endl;
//max_size( )
if (!myList1.empty()) cout << "myList1.max_size() returns: " << myList1.max_size() << endl;
//Question 1: Is MyList2 a shallow or deep copy of myList2? Why?
//swap( )
myList1.swap(myList2);
if (!myList1.empty()) cout << "myList1.size() returns: " << myList1.size() << endl;
cout << "Content of myList1..." << endl;
iter1 = myList1.begin();
while (iter1 != myList1.end())
{
cout << *iter1 << ' ';
iter1++;
}
cout << endl;
if (!myList2.empty()) cout << "myList2.size() returns: " << myList2.size() << endl;
cout << "Content of myList2..." << endl;
iter2 = myList2.begin();
while (iter2 != myList2.end())
{
cout << *iter2 << ' ';
iter2++;
}
cout << endl;
//begin( ) and end ( )
//for (list<int>::iterator forwardIter = myList2.begin(); forwardIter != myList2.end(); forwardIter++)
cout << "Display list 2 forward..." << endl;
for (auto myForwardIter = myList2.begin(); myForwardIter != myList2.end(); myForwardIter++)
cout << *myForwardIter << ' ';
cout << endl;
//rbegin( ) and rend ( )
cout << "Display list 2 in reverse..." << endl;
for (auto myReverseIter = myList2.rbegin(); myReverseIter != myList2.rend(); myReverseIter++)
cout << *myReverseIter << ' ';
cout << endl;
return 0;
}
Explanation / Answer
// Note: Please do thumbs up if you like the answer
#include <list>
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
/*** Test common functions of containers ***/
//default constructor
list<int> myList1;
vector <int>myVect1;
//Get an appropriate iterator for myList1
list<int>::iterator iter1 = myList1.begin();
vector<int>::iterator iter_1 = myVect1.begin();
//insert(pos, elem), 'pos' is an iterator
myList1.insert(iter1, 111);
myList1.insert(iter1, 222);
myList1.insert(iter1, 333);
iter1 = myList1.begin();
while (iter1 != myList1.end())
{
cout << *iter1 << ' ';
iter1++;
}
iter_1 = myVect1.insert(iter_1, 111);
iter_1 = myVect1.insert(iter_1 + 1, 222);
iter_1 = myVect1.insert(iter_1 + 1, 333);
cout << " Printing vector as below: " << endl;
iter_1 = myVect1.begin();
while (iter_1 != myVect1.end())
{
cout << *iter_1 << ' ';
iter_1++;
}
//copy constructor
list<int> myList2(myList1);
vector<int> myVect2(myVect1);
//Get an appropriate iterator for myList1
list<int>::iterator iter2 = myList2.begin();
vector<int>::iterator iter_2 = myVect2.begin();
cout << " Copied list is: " << endl;
iter2 = myList2.begin();
while (iter2 != myList2.end())
{
cout << *iter2 << ' ';
iter2++;
}
cout << " Copied vector is: " << endl;
iter_2 = myVect2.begin();
while (iter_2 != myVect2.end())
{
cout << *iter_2 << ' ';
iter_2++;
}
iter2 = myList2.begin();
iter_2 = myVect2.begin();
//erase(begin, end)
myList2.erase(++iter2, myList2.end());
myVect2.erase(++iter_2, myVect2.end());
//empty( )
cout << boolalpha<<endl;
if (!myList1.empty()) cout << "myList1.empty() returns: " << myList1.empty() << endl;
if (!myVect1.empty()) cout << "myVect1.empty() returns: " << myVect1.empty() << endl;
//size( )
if (!myList1.empty()) cout << "myList1.size() returns: " << myList1.size() << endl;
if (!myList2.empty()) cout << "myList2.size() returns: " << myList2.size() << endl;
if (!myVect1.empty()) cout << "myVect1.size() returns: " << myVect1.size() << endl;
if (!myVect2.empty()) cout << "myVect2.size() returns: " << myVect2.size() << endl;
//max_size( )
if (!myList1.empty()) cout << "myList1.max_size() returns: " << myList1.max_size() << endl;
if (!myVect1.empty()) cout << "myVect1.max_size() returns: " << myVect1.max_size() << endl;
//Question 1: Is MyList2 a shallow or deep copy of myList2? Why?
//swap( )
myList1.swap(myList2);
if (!myList1.empty()) cout << "myList1.size() returns: " << myList1.size() << endl;
cout << "Content of myList1..." << endl;
iter1 = myList1.begin();
while (iter1 != myList1.end())
{
cout << *iter1 << ' ';
iter1++;
}
cout << endl;
if (!myList2.empty()) cout << "myList2.size() returns: " << myList2.size() << endl;
cout << "Content of myList2..." << endl;
iter2 = myList2.begin();
while (iter2 != myList2.end())
{
cout << *iter2 << ' ';
iter2++;
}
cout << endl;
// vector
myVect1.swap(myVect2);
if (!myVect1.empty()) cout << "myVect1.size() returns: " << myVect1.size() << endl;
cout << "Content of myVect1..." << endl;
iter_1 = myVect1.begin();
while (iter_1 != myVect1.end())
{
cout << *iter_1 << ' ';
iter_1++;
}
cout << endl;
if (!myVect2.empty()) cout << "myVect2.size() returns: " << myVect2.size() << endl;
cout << "Content of myVect2..." << endl;
iter_2 = myVect2.begin();
while (iter_2 != myVect2.end())
{
cout << *iter_2 << ' ';
iter_2++;
}
cout << endl;
//begin( ) and end ( )
//for (list<int>::iterator forwardIter = myList2.begin(); forwardIter != myList2.end(); forwardIter++)
cout << "Display list 2 forward..." << endl;
for (auto myForwardIter = myList2.begin(); myForwardIter != myList2.end(); myForwardIter++)
cout << *myForwardIter << ' ';
cout << endl;
//rbegin( ) and rend ( )
cout << "Display list 2 in reverse..." << endl;
for (auto myReverseIter = myList2.rbegin(); myReverseIter != myList2.rend(); myReverseIter++)
cout << *myReverseIter << ' ';
cout << endl;
// vector
cout << "Display Vector 2 forward..." << endl;
for (auto myForwardIter_2 = myVect2.begin(); myForwardIter_2 != myVect2.end(); myForwardIter_2++)
cout << *myForwardIter_2 << ' ';
cout << endl;
//rbegin( ) and rend ( )
vector<int>::reverse_iterator myReverseIter_2 = myVect2.rbegin();
cout << "Display Vector 2 in reverse..." << endl;
for (; myReverseIter_2 != myVect2.rend(); myReverseIter_2++)
cout << *myReverseIter_2 << ' ';
cout << endl;
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.