Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template <typename T>
- class Vector
- {
- private:
- int internal_size; //размер вектора
- unsigned int capacity;//вместимость вектора
- T* data;//указатель на массив
- void reserve(unsigned int);
- public:
- Vector();
- ~Vector();
- unsigned int size();
- void push_back(const T&);//Добавить элемент в конец вектора
- void pop_back();//Удалить элемент в конце вектора
- void erase(int);//Удалить элемент или диапазон элементов в векторе из заданных позиций
- T& back();//Вернуть ссылку на последний элемент вектора
- void clear();//Очистить элементы вектора
- void resize(unsigned int);//Задать новый размер вектора в виде числа элементов
- void assign(int, const T&);//Заменить указанные элементы на копии указанного значения или диапазона значений
- unsigned int find(const T& val);
- T& operator[](unsigned int index);
- };
- template<class T>
- Vector<T>::Vector()
- {
- internal_size = capacity = 0;
- data = NULL;
- };
- template<class T>
- Vector<T>::~Vector()
- {
- delete[] data;
- };
- template<class T>
- unsigned int Vector<T>::size()
- {
- return internal_size;
- }
- template<class T>
- T& Vector<T>::back()
- {
- return data[internal_size - 1];
- }
- template<class T>
- void Vector<T>::pop_back()
- {
- internal_size--;
- }
- template<class T>
- void Vector<T>::push_back(const T& val)
- {
- if (internal_size == capacity)
- {
- if (capacity == 0)
- reserve(1);
- else reserve(2 * capacity);
- }
- data[internal_size] = val;
- internal_size++;
- }
- template<class T>
- void Vector<T>::assign(int s, const T& val)
- {
- delete[] data;
- internal_size = capacity = 0;
- resize(s);
- for (int i = 0; i < s; ++i)
- {
- data[i] = val;
- }
- }
- template<class T>
- void Vector<T>::clear()
- {
- delete[] data;
- internal_size = capacity = 0;
- }
- template<class T>
- void Vector<T>::erase(int ind)
- {
- for (int i = ind; i < internal_size - 1; ++i)
- data[i] = data[i + 1];
- internal_size--;
- }
- template<class T>
- T& Vector<T>::operator[](unsigned int index) {
- return data[index];
- }
- template<class T>
- void Vector<T>::reserve(unsigned int n)
- {
- if (n <= capacity) return;
- T *new_data = new T[n];
- for (int i = 0; i < internal_size; ++i)
- new_data[i] = data[i];
- capacity = n;
- delete[] data;
- data = new_data;
- }
- template<class T>
- void Vector<T>::resize(unsigned int n)
- {
- if (n <= internal_size)
- return;
- reserve(n);
- internal_size = n;
- }
- template<class T>
- unsigned int Vector<T>::find(const T& val)
- {
- unsigned int index = -1;
- for (int i = 0; i < internal_size; ++i)
- {
- if (data[i] == val)
- return i;
- }
- return index;
- }
- int main() {
- // your code goes here
- Vector<int> vec;
- vec.resize(10);
- cout << vec.size() << endl;
- for (int i = 0; i < 10; i++)
- vec[i] = i;
- vec.push_back(14);
- vec.push_back(-1);
- vec.push_back(26);
- for (int i = 0; i < vec.size(); i++)
- cout << vec[i] << " ";
- cout << endl << vec.find(-1) << endl;
- vec.pop_back();
- for (int i = 0; i < vec.size(); i++)
- cout << vec[i] << " ";
- cout << endl << vec.back() << endl;
- vec.erase(6);
- for (int i = 0; i < vec.size(); i++)
- cout << vec[i] << " ";
- vec.assign(10, -2);
- cout << endl;
- for (int i = 0; i < vec.size(); i++)
- cout << vec[i] << " ";
- vec.clear();
- cout << endl << vec.size();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement