#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; }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter