Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please solve the to do parts of the following problem. Thank you in advance. This assignment involves review of template classes, implementation of vector data

Please solve the to do parts of the following problem.

Thank you in advance.

This assignment involves review of template classes, implementation of vector data type and function objects. Students are expected to review the vector template class that is available in the C++ STL and complete the practice lab before embarking on the assignment.

#Create a Vector Template Class (Vector Abstract Data Type) that is implemented as a dynamic array with an initial size of 2.

Implement a default constructor - a copy constructor as well as a destructor for this Vector ADT will be done in Assignment 2.

Implement typical Vector functions like push_back,pop, pop_back, insert, remove, size, resize, search and sort and other functions as given below and in the template

#The main driver is given to you. Run the program first time with SongsData.txt and then with the larger file SongsDataDouble.txt.

#Use the template given to you for further guidance and support

//default constructor

VectorADT();

// return address of element at index position i

T* get(int i) const;

// print the entire database

void printVectorADT();

// print the number of items specified

void printVectorADT(int number);

// double the size of the database by

//creating another database twice the size and copying

//the existing database into it. The existing one is then deleted

void resizeADT();

// returns true if database is empty, false otherwise

bool empty();

//returns the number of items in the database

int size() const;

// add an item to the end of the database

void push_back(T *);

// remove and return the last element of the database if there is one

T* pop_back();

// "peeks" ie returns a pointer to the last element without removing or deleting it

T* pop();

// inserts at the proper position, no sorting necessary

// element is inserted at index =pos

//if pos is negative or unacceptable number throws exception and exits

void insert(T * v, int pos);

// deletes the item at index position =pos

//if database is empty or pos is negative or an unacceptable number throws exception and exits

void remove(int pos);

void topTen();

// prints top 10 items

// kept sorted according to position - use function objects - selection sort

int sort(LessThan f);

main.cpp

#include #include #include #include "Songcpp.h" #include "VectorADTcpp.h"

int populatedataBase(VectorADT &mySongs){ std::ifstream input("SongsData.txt"); std::string line; std::string title; std::string singer; std::string cp;//chart position in string int chartPosition=0; int dataCount=0; if (!input){ throw new std::string("File Open Error "); exit(-1); } while (std::getline(input,line)){ // std::getline(input,line); std::string token; std::istringstream instream(line); std::getline(instream,title, ','); std::getline(instream, singer, ','); std::getline(instream, cp,' '); // std::cout<

} return dataCount; }

int main() {

VectorADT database;

int dataCount=populatedataBase(database); //database.printVectorADT(); LessThan f; int steps =database.sort(f); std::cout<<"************************************* "; std::cout<<"Selection Sorting By Chart Position Steps = "<toString()<

Song *insertThis2= new Song("fifth place","BTS",5);//chartposition int insertSteps=database.insert(insertThis2, 5);//will go into 6th position std::cout<<"inserted song at index 6 "<toString()<< " Number of insert adjust steps= "<toString()<<" "; int found =database.searchByTitle(searchSteps,removeSong); if (found >=0) std::cout<<"FOUND - Took Linear Search Steps - "<

LessThencpp.h

template < class T> class LessThan{ public: bool operator()(T a, T b){ return a

Song.h

#include class Song{ private: std::string title; std::string singer; int chartPosition; public: Song(); Song(std::string title,std:: string singer, int chartPosition); std::string toString(); std::string getTitle(); void setChartPosition(int pos); friend std::ostream & operator<<(std::ostream&, Song* s); int getChartPosition(); bool operator<(Song b);//used for search compare chartpositions bool operator<=(Song b);// used for binary search compare titles bool operator==(Song b); };

Songcpp.h

#include "Song.h" Song::Song(){ title=""; singer=""; chartPosition=0; } //GIVEN Song::Song(std::string title, std::string singer, int chartPosition){ this->title=title; this->singer=singer; this->chartPosition=chartPosition; } //GIVEN std::string Song::toString(){ return "Title: "+title+ " Singer: "+singer+ " ChartPosition: "+std::to_string(chartPosition); } // //GIVEN std::ostream& operator<<(std::ostream & str, Song *s){ str<< s->toString(); return str; } //GIVEN int Song::getChartPosition(){ return chartPosition; } //GIVEN void Song::setChartPosition(int pos){ chartPosition=pos; } //GIVEN bool Song::operator<(Song b){ return chartPosition

bool Song::operator==(Song b){ //TODO return""; // } //GIVEN std::string Song::getTitle(){ return title; }

VectorADT.h

#include

#include "LessThancpp.h"

#include

template

//template class VectorADT{

const size_t SIZE = 2;

private: T ** dataArray = nullptr; int count; public: //default constructor VectorADT();

// return address of element at index position i T* get(int i) const; // set the element e at position i void set(int i, T *); // print the entire database void printVectorADT(); // print the number of items specified void printVectorADT(int number); // double the size of the database by //creating another database twice the size and copying //the existing database into it. The existing one is then deleted void resizeADT(); // returns true if database is empty, false otherwise bool empty();

//returns the number of items in the database int size() const; // add an item to the end of the database void push_back(T *); // remove and return the last element of the database if there is one T* pop_back(); // "peeks" ie returns a pointer to the last element without removing or deleting it T* pop(); // inserts at the proper position, no sorting necessary // element is inserted at index =pos //if pos is negative or unacceptable number throws exception and exits //returns the number of adjustments done to shift data to right int insert(T * v, int pos);

// deletes the item at index position =pos //if database is empty or pos is negative or an unacceptable number throws exception and exits //returns the number of adjustments done to shift data left int remove(int pos);

void topTen(); // prints top 10 items // kept sorted according to position - use function objects - selection sort int sort(LessThan f);

int searchByTitle(int& steps, T *v); };

VectorADTcpp.h

#include #include "VectorADT.h"

//GIVEN template VectorADT::VectorADT (){ dataArray= new T*[SIZE]; count=0; }

//TODO //double the size of the dataArray //create a temporary dataArray of double the size //copy over the current data Array and then delete it //use REM documentation

template void VectorADT::resizeADT(){ // TODO } //TODO //appends an element to the end of the VectorADT //increments size by 1 //if run out of size, resize the vector // REM documentation template void VectorADT::push_back(T *v){ //TODO } //TODO //returns a copy of the element from the end of the VectorADT //does not delete //no resize of the vector // REM documentation template T * VectorADT::pop(){ //TODO } //TODO //removes an element from the end of the VectorADT //decrements size by 1 //no resize of the vector // REM documentation template T * VectorADT::pop_back() { ; //TODO } template void VectorADT::printVectorADT(){ for (int i=0;i int VectorADT::size() const { return count;} //FILL IN THE BLANK FOR COMPARISON template int VectorADT::sort(LessThan less){ int steps=0; T * minValue= new T(); int minIndex=0; for (int i=0;i bool VectorADT:: empty(){ return (count<=0); }

//GIVEN template T* VectorADT:: get(int i) const{ if (i>=0 && i

//GIVEN template void VectorADT::set(int i, T * t){ if (i>=0 && i int VectorADT::insert(T * v, int pos){ int adjustSteps=0; // TODO return adjustSteps; }

//TODO //TODO //USE template //removes the object at the given INDEX position NOT chart position //DOes NOT adjust chart position //THROWS exception if index out of bounds //left adjusts the elements to the right of the inserted object //returns number of adjusted steps template int VectorADT::remove(int pos){ int adjustSteps=0; //TODO return adjustSteps; }

//TODO Linear search //use the overloaded == operator of the Song objects //returns -1 if not found else returns the found index template int VectorADT::searchByTitle(int& steps, T *v){ // TODO return -1; }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access with AI-Powered Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions