mVector Class + Functions #include <iostream> #include <cassert> #include <time.
ID: 3918054 • Letter: M
Question
mVector Class + Functions
#include <iostream>
#include <cassert>
#include <time.h>
#include <cstdlib>
using namespace std;
template<typename T>
class mVector{
public:
void operator-- (T);
void operator-- ();
typedef T* iter;
void insert(iter ix, T x);
void erase(iter ix);
mVector();
mVector(unsigned int n);
void pBack(T x);
void pBack();
void clear();
T operator[] (unsigned int i);
int size();
void prnt();
iter begin(){return v;}
iter end(){return v+vSize;}
private:
int vSize;
int vCap;
T *v;
void reserve(unsigned int n);
};
template<typename T>
mVector<T>::mVector()
{
T *newVector = new T[2];
assert(newVector != NULL);
vCap = 2;
vSize = 0;
v = newVector;
}
template<typename T>
mVector<T>::mVector(unsigned int n)
{
T *newVector = new T[n];
vCap = n;
vSize = 0;
}
template<typename T>
void mVector<T>::pBack(T x) {
if (vSize < vCap) {
v[vSize] = x;
vSize++;
}
else{
this->reserve(2*vCap);
v[vSize] = x;
vSize++;
}
}
template<typename T>
void mVector<T>::pBack() {
assert(vSize > 0);
vSize--;
}
template<typename T>
void mVector<T>::clear(){
vSize = 0;
}
//remake with iterators
template<typename T>
void mVector<T>::insert(iter ix, T x){
if (vSize == vCap) {
this->reserve(2 * vCap);
}
for (iter jx = v + vSize; jx != ix; jx--) {
*jx = *(jx-1);
}
*ix = x;
vSize++;
}
//remake with iterators
template<typename T>
void mVector<T>::erase(iter ix){
for (iter jx = ix; jx != (v+vSize)-1; jx++) {
*jx = *(++jx);
}
vSize--;
}
template<typename T>
T mVector<T>::operator[] (unsigned int i){
assert(i < vSize and vSize > 0);
return v[i];
}
template<typename T>
int mVector<T>::size(){
return vSize;
}
template<typename T>
void mVector<T>::prnt(){
for (int i = 0; i < (this->vSize); i++)
{
cout << this->v[i] << ' ';
cout << endl;
}
}
template<typename T>
void mVector<T>::reserve(unsigned int n){
assert(n > vCap);
T *newVector = new T[n];
assert(newVector != NULL);
for (int i = 0; i < vSize; i++){
newVector[i] = v[i];
}
delete[] v;
v = newVector;
vCap = n;
}
template<typename T>
void mVector<T>::operator-- (T) //postfix
{
this->pBack();
}
template<typename T>
void mVector<T>::operator-- () //prefix
{
this->pBack();
}
Problem 1. (20 pts) Show how you would modify the Mvector template class to add a bool operator == (Mvector v2) which would returns true if the two vectors are equal and false otherwise. Two vectors are equal if they have the same size and vi]-v2i] for all i. The main program that uses the operator would look like below: Mvector v1-Mvector Mvector v2-Mvector If (v1--v2)Explanation / Answer
#include <iostream>
#include <cassert>
#include <time.h>
#include <cstdlib>
using namespace std;
template<typename T>
class mVector{
public:
void operator-- (T);
void operator-- ();
typedef T* iter;
void insert(iter ix, T x);
void erase(iter ix);
mVector();
mVector(unsigned int n);
void pBack(T x);
void pBack();
void clear();
T operator[] (unsigned int i);
int size();
void prnt();
iter begin(){return v;}
iter end(){return v+vSize;}
bool operator== (mVector<T> v1);
private:
int vSize;
int vCap;
T *v;
void reserve(unsigned int n);
};
template<typename T>
mVector<T>::mVector()
{
T *newVector = new T[2];
assert(newVector != NULL);
vCap = 2;
vSize = 0;
v = newVector;
}
template<typename T>
mVector<T>::mVector(unsigned int n)
{
T *newVector = new T[n];
vCap = n;
vSize = 0;
}
template<typename T>
void mVector<T>::pBack(T x) {
if (vSize < vCap) {
v[vSize] = x;
vSize++;
}
else{
this->reserve(2*vCap);
v[vSize] = x;
vSize++;
}
}
template<typename T>
void mVector<T>::pBack() {
assert(vSize > 0);
vSize--;
}
template<typename T>
void mVector<T>::clear(){
vSize = 0;
}
//remake with iterators
template<typename T>
void mVector<T>::insert(iter ix, T x){
if (vSize == vCap) {
this->reserve(2 * vCap);
}
for (iter jx = v + vSize; jx != ix; jx--) {
*jx = *(jx-1);
}
*ix = x;
vSize++;
}
//remake with iterators
template<typename T>
void mVector<T>::erase(iter ix){
for (iter jx = ix; jx != (v+vSize)-1; jx++) {
*jx = *(++jx);
}
vSize--;
}
template<typename T>
T mVector<T>::operator[] (unsigned int i){
assert(i < vSize and vSize > 0);
return v[i];
}
template<typename T>
int mVector<T>::size(){
return vSize;
}
template<typename T>
void mVector<T>::prnt(){
for (int i = 0; i < (this->vSize); i++)
{
cout << this->v[i] << ' ';
cout << endl;
}
}
template<typename T>
void mVector<T>::reserve(unsigned int n){
assert(n > vCap);
T *newVector = new T[n];
assert(newVector != NULL);
for (int i = 0; i < vSize; i++){
newVector[i] = v[i];
}
delete[] v;
v = newVector;
vCap = n;
}
template<typename T>
void mVector<T>::operator-- (T) //postfix
{
this->pBack();
}
template<typename T>
void mVector<T>::operator-- () //prefix
{
this->pBack();
}
template<typename T>
bool mVector<T>::operator== (mVector<T> v1)
{
if (size() == v1.size()){
for (int i = 0; i<size(); i++){
if (v[i] != v1[i])
return false;
}
}
else {
return false;
}
return true;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.