Please debug this code and the correct output is shown in the image below #include #include #include // primary data members: template class dynamic_array { T* data; size_t n; public:...


Please debug this code and the correct output is shown in the image below


#include
#include
#include


// primary data members:
template
class dynamic_array
{
T* data;
size_t n;






public:
dynamic_array(int n)
{
this->n = n;
data = new T[n];
}
dynamic_array(const dynamic_array& other)
{
n = other.n;
data = new T[n];
for(int i = 0; i < n;="">
data[i] = other[i];
}






T& operator[](int index)
{
return data[index];
}
const T& operator[](int index) const
{
return data[index];
}
T& at(int index)
{
if(index <>
return data[index];
throw "Index out of range";
}






size_t size() const
{
return n;
}




//
// dynamic_array:
T* begin()
{
return data;
}
const T* begin() const
{
return data;


}
T* end()
{
return data + n;
}
const T* end() const
{
return data + n;
}






friend dynamic_array operator+(const dynamic_array& arr1, dynamic_array& arr2){
dynamic_array result(arr1.size() + arr2.size());
std::copy(arr1.begin(), arr1.end(), result.begin());
std::copy(arr2.begin(), arr2.end(), result.begin() + arr1.size());
return result;
}


std::string to_string(const std::string& sep = ", ")
{
if(n == 0)
return "";
std::ostringstream os;
os <>
for(int i = 1; i < n;="">
os < sep=""><>
return os.str();
}
};






// add operator< to="" print="" it="">
struct student
{
std::string name;
int standard;
};
std::ostream& operator<(std::ostream& os,="" const="" student&="">
{
return (os < "[name:="" "="">< s.name="">< ",="" standard:="" "="">< s.standard="">
"]");
}






int main()
{
int nStudents;
std::cout < "enter="" number="" of="" students="" in="" class="" 1:="">
std::cin >> nStudents;
dynamic_array class1(nStudents);
for(int i = 0; i < nstudents;="">
{
std::cout < "enter="" name="" and="" class="" of="" student="" "="">< i="" +="" 1="">< ":="">
std::string name;
int standard;
std::cin >> name >> standard;
class1[i] = student{name, standard};
}
// Now, let's try to access the student out of range in the array
try
{
class1[nStudents] = student{"John", 8}; // No exception, undefined
// behavior
std::cout < "class1="" student="" set="" out="" of="" range="" without="" exception"="">
std::endl;
class1.at(nStudents) = student{"John", 8}; // Will throw exception
}
catch(...)
{
std::cout < "exception="" caught"=""><>
}
auto class2 = class1; // Deep copy
std::cout < "second="" class="" after="" initialized="" using="" first="" array:="" "="">
class2.to_string() <>
auto class3 = class1 + class2;
// Combines both classes and creates a bigger one
std::cout < "combined="" class:="">
std::cout < class3.to_string()=""><>
return 0;
}


Enter number of students in class 1 : 3<br>Enter name and class of student 1: Raj 8<br>Enter name and class of student 2: Rahul 10<br>Enter name and class of student 3: Viraj 6<br>classi student set out of range without exception<br>Exception caught<br>Second class after initialized using first array : [Name: Raj, standard: 8], [Name: Rahul, standard: 10], [Name: Viraj, standa<br>rd: 6]<br>Combined class : [Name: Raj, standard: 8], [Name: Rahul, standard: 10],<br>[Name: Viraj, standard: 6], [Name: Raj, Standard: 8], [Name: Rahul,<br>Standard: 10], [Name: Viraj, standard: 6]<br>

Extracted text: Enter number of students in class 1 : 3 Enter name and class of student 1: Raj 8 Enter name and class of student 2: Rahul 10 Enter name and class of student 3: Viraj 6 classi student set out of range without exception Exception caught Second class after initialized using first array : [Name: Raj, standard: 8], [Name: Rahul, standard: 10], [Name: Viraj, standa rd: 6] Combined class : [Name: Raj, standard: 8], [Name: Rahul, standard: 10], [Name: Viraj, standard: 6], [Name: Raj, Standard: 8], [Name: Rahul, Standard: 10], [Name: Viraj, standard: 6]

Jun 11, 2022
SOLUTION.PDF

Get Answer To This Question

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here