Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication2.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- //
- #include "pch.h"
- #include <iostream>
- #include <vector>
- template <class T>
- class Victor {
- private:
- size_t len;
- T *arr;
- public:
- //TODO: конструктор копирования
- Victor(T *arr) : len(sizeof(arr)){
- this->arr = new T[len];
- for (auto i = 0; i < len; i++)
- this->arr[i] = arr[i];
- }
- //Victor(T &&arr) {
- // len = len(sizeof(arr) / sizeof(T));
- // this->arr = arr;
- //}
- Victor(const Victor &obj) : len(obj.len){
- this->arr = new T[len];
- for (auto i = 0; i < len; i++)
- this->arr[i] = obj.arr[i];
- }
- Victor(Victor &&obj) {
- len = obj.len;
- arr = obj.arr;
- obj.arr = nullptr;
- }
- // Оператор присвоения
- Victor& operator= (const Victor &obj) {
- if (this == &obj)
- return *this;
- delete[] arr;
- this->len = obj.len;
- this->arr = new T[len];
- for (auto i = 0; i < len; i++)
- this->arr[i] = obj.arr[i];
- return *this;
- }
- //TODO: конструктор перемещения
- // ----------------------------
- // метод begin
- T* begin() {
- return arr;
- }
- // метод end
- T* end() {
- return (arr + len);
- }
- // метод size
- size_t size() {
- return len;
- }
- void printVector() {
- for (auto i = 0; i != len; i++)
- std::cout << arr[i] << std::ends;
- std::cout << std::endl;
- }
- // -----------------------------
- // метод push_back; TODO: Доделать копирование и перемещение;
- void push_back(const T& el)
- {
- T* arr1 = new T[len + 1];
- for (auto i = 0; i < len; i++)
- arr1[i] = arr[i];
- arr1[len] = el;
- delete[] arr;
- arr = arr1;
- len++;
- }
- void push_back(T&& el)
- {
- T* arr1 = new T[len + 1];
- for (auto i = 0; i < len; i++)
- arr1[i] = arr[i];
- arr1[len] = el;
- delete[] arr;
- arr = arr1;
- len++;
- }
- // TODO: метод pop_back
- void pop_back()
- {
- T* arr1 = new T[len - 1];
- for (auto i = 0; i < len - 1; i++)
- arr1[i] = arr[i];
- delete[] arr;
- arr = arr1;
- len--;
- }
- // TODO: метод erase
- void erase(const T* inx) {
- T *narr = new T[len - 1];
- for (auto i = arr; i != inx; i++)
- *(narr + (i - arr)) = *i;
- for (auto i = inx + 1; i != arr + len; i++)
- *(narr + (i - arr - 1)) = *i;
- delete[] arr;
- arr = narr;
- len--;
- }
- void erase(const T* b, const T* e) {
- if (e > b) {
- auto declen = e - b + 1;
- T *narr = new T[len - declen];
- for (auto i = arr; i != b; i++)
- *(narr + (i - arr)) = *i;
- for (auto i = e + 1; i != arr + len; i++)
- *(narr + (i - arr - declen)) = *i;
- delete[] arr;
- arr = narr;
- len -= declen;
- }
- }
- };
- int main()
- {
- int a[4] = { 1, 2, 3, 4 };
- //std::cout << sizeof(a) << std::endl;
- //char b[2] = { '1', '2'};
- Victor<int> v(a);
- //Victor<char> v2(b);
- v.push_back(3*(1+5));
- v.erase(v.begin(), v.begin() + 1);
- v.printVector();
- //v2.printVector();
- //std::vector<int> v1 = { 1, 2, 3 };
- //std::cout << *(v1.end()-1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement