#pragma once
#ifndef MYVEC_H
#define MYVEC_H
#include <iostream>
#include<algorithm>
template <typename T>
class Myvec
{
public:
Myvec();
Myvec(int& size);
Myvec(int& size, T& value);
~Myvec();
void push_back(T& value);
void pop();
unsigned int get_size()const;
T at(int& index)const;
bool empty()const;
void clear();
void swap(Myvec& v);
void print();
private:
T* elements;
int size;
int capacity;
void ensureCapacity();
};
template<typename T>
Myvec<T>::Myvec():size(0),capacity(16)
{
elements = new T[capacity];
}
template<typename T>
Myvec<T>::Myvec(int& size)
{
size = size;
}
template<typename T>
Myvec<T>::Myvec(int& size, T& vlaue)
{
size = size;
elements[0] = vlaue;
}
template<typename T>
Myvec<T>::~Myvec()
{
delete[] elements;
}
template<typename T>
void Myvec<T>::push_back(T& value)
{
ensureCapacity();
elements[size++] = value;
}
template < typename T>
void Myvec<T>::ensureCapacity()
{
if (size >= capacity)
{
T* old = elements;
capacity = 2 * size;
elements = new T[size * 2];
for (int i = 0; i < size; i++)
elements[i] = old[i];
delete[] old;
}
}
template <typename T>
void Myvec<T>::pop()
{
--size;
}
template <typename T>
unsigned int Myvec<T>::get_size()const
{
return size;
}
template <typename T >
T Myvec<T>::at(int& index)const
{
if(index < size)
return elements[index];
}
template <typename T>
bool Myvec<T>::empty()const
{
return size == 0;
}
template <typename T>
void Myvec<T>::clear()
{
size = 0;
}
template <typename T>
void Myvec<T>::swap(Myvec& v)
{
T* temp = new T[size];
int s = this->size;
for (int i = 0; i < s; i++)
{
temp[i] =this->elements[i];
}
this->clear();
for (int i = 0; i < v.get_size(); i++)
{
this->push_back(v.elements[i]);
}
v.clear();
for (int i = 0; i < s; i++)
{
v.push_back(temp[i]);
}
delete[]temp;
}
template<typename T>
void Myvec<T>::print()
{
for (int i = 0; i < size; i++)
{
std::cout << this->at(i)<<" ";
}
std::cout << std::endl;
}
#endif // !MYVEC_H
#include <iostream>
#include <vector>
#include <string>
#include"Stack.h"
#include<algorithm>
#include "Myvec.h"
using namespace std;
int main()
{
Myvec<int> v1;
Myvec<int> v2;
for (int i = 1; i < 50; i++)
{
v2.push_back(i);
}
for (int i = 0; i < 20; i++)
{
v1.push_back(i);
}
v1.print();
cout << endl;
}