diff options
changed folders
4 files changed, 367 insertions, 367 deletions
| -rw-r--r-- | Sem. 10/Examples/MyString/MyString.cpp (renamed from Sem. 10/MyString/MyString.cpp) | 274 | ||||
| -rw-r--r-- | Sem. 10/Examples/MyString/MyString.h (renamed from Sem. 10/MyString/MyString.h) | 82 | ||||
| -rw-r--r-- | Sem. 10/Examples/Queue.hpp (renamed from Sem. 10/Queue.hpp) | 298 | ||||
| -rw-r--r-- | Sem. 10/Examples/Source.cpp (renamed from Sem. 10/Source.cpp) | 80 |
diff --git a/Sem. 10/MyString/MyString.cpp b/Sem. 10/Examples/MyString/MyString.cpp index 1bceef5..77f2119 100644 --- a/Sem. 10/MyString/MyString.cpp +++ b/Sem. 10/Examples/MyString/MyString.cpp @@ -1,138 +1,138 @@ -#include "MyString.h"
-#include <cstring>
-#include <iostream>
-
-void MyString::copyFrom(const MyString& other)
-{
- str = new char[strlen(other.str) + 1];
- strcpy(str, other.str);
- size = other.size;
-}
-void MyString::free()
-{
- delete[] str;
-}
-
-MyString::MyString()
-{
- str = new char[1];
- str[0] = '\0';
- size = 0;
-}
-
-MyString::MyString(const char* data)
-{
- size = strlen(data);
- str = new char[size + 1];
- strcpy(str, data);
-}
-
-MyString::MyString(const MyString& other)
-{
- copyFrom(other);
-}
-MyString& MyString::operator=(const MyString& other)
-{
- std::cout << "op=" << std::endl;
-
- if (this != &other)
- {
- free();
- copyFrom(other);
- }
- return *this;
-}
-MyString::~MyString()
-{
- free();
-}
-
-
-size_t MyString::getSize() const
-{
- return size;
-}
-void MyString::concat(const MyString& other)
-{
- char* temp = new char[getSize() + other.getSize() + 1];
- strcpy(temp, str);
- strcat(temp, other.str);
-
- delete[] str;
- str = temp;
- size = size + other.getSize();
-}
-
-const char* MyString::c_str() const
-{
- return str;
-}
-
-MyString& MyString::operator+=(const MyString& other)
-{
- concat(other);
- return *this;
-}
-
-MyString operator+(const MyString& lhs, const MyString& rhs)
-{
- MyString copyOfLeft(lhs);
- copyOfLeft += rhs;
- return copyOfLeft;
-}
-
-std::ostream& operator<<(std::ostream& stream, const MyString& str)
-{
- stream << str.str;
- return stream;
-}
-
-std::istream& operator>>(std::istream& stream, MyString& str)
-{
- delete[] str.str;
- char buff[1024];
- stream >> buff;
-
- str.size = strlen(buff);
- str.str = new char[str.size + 1];
- strcpy(str.str, buff);
-
- return stream;
-}
-
-bool operator==(const MyString& lhs, const MyString& rhs)
-{
- return strcmp(lhs.c_str(), rhs.c_str()) == 0;
-}
-bool operator<=(const MyString& lhs, const MyString& rhs)
-{
- return strcmp(lhs.c_str(), rhs.c_str()) <= 0;
-
-}
-bool operator<(const MyString& lhs, const MyString& rhs)
-{
- return strcmp(lhs.c_str(), rhs.c_str()) < 0;
-
-}
-
-MyString::MyString(MyString&& otherString)
-{
- str = otherString.str;
- size = otherString.size;
- otherString.str = nullptr;
- std::cout << "move constr" << std::endl;
-}
-
-MyString& MyString::operator=(MyString&& otherString)
-{
- std::cout << "move op=" << std::endl;
-
- if (this != &otherString)
- {
- free();
- str = otherString.str;
- otherString.str = nullptr;
- size = otherString.size;
- }
- return *this;
+#include "MyString.h" +#include <cstring> +#include <iostream> + +void MyString::copyFrom(const MyString& other) +{ + str = new char[strlen(other.str) + 1]; + strcpy(str, other.str); + size = other.size; +} +void MyString::free() +{ + delete[] str; +} + +MyString::MyString() +{ + str = new char[1]; + str[0] = '\0'; + size = 0; +} + +MyString::MyString(const char* data) +{ + size = strlen(data); + str = new char[size + 1]; + strcpy(str, data); +} + +MyString::MyString(const MyString& other) +{ + copyFrom(other); +} +MyString& MyString::operator=(const MyString& other) +{ + std::cout << "op=" << std::endl; + + if (this != &other) + { + free(); + copyFrom(other); + } + return *this; +} +MyString::~MyString() +{ + free(); +} + + +size_t MyString::getSize() const +{ + return size; +} +void MyString::concat(const MyString& other) +{ + char* temp = new char[getSize() + other.getSize() + 1]; + strcpy(temp, str); + strcat(temp, other.str); + + delete[] str; + str = temp; + size = size + other.getSize(); +} + +const char* MyString::c_str() const +{ + return str; +} + +MyString& MyString::operator+=(const MyString& other) +{ + concat(other); + return *this; +} + +MyString operator+(const MyString& lhs, const MyString& rhs) +{ + MyString copyOfLeft(lhs); + copyOfLeft += rhs; + return copyOfLeft; +} + +std::ostream& operator<<(std::ostream& stream, const MyString& str) +{ + stream << str.str; + return stream; +} + +std::istream& operator>>(std::istream& stream, MyString& str) +{ + delete[] str.str; + char buff[1024]; + stream >> buff; + + str.size = strlen(buff); + str.str = new char[str.size + 1]; + strcpy(str.str, buff); + + return stream; +} + +bool operator==(const MyString& lhs, const MyString& rhs) +{ + return strcmp(lhs.c_str(), rhs.c_str()) == 0; +} +bool operator<=(const MyString& lhs, const MyString& rhs) +{ + return strcmp(lhs.c_str(), rhs.c_str()) <= 0; + +} +bool operator<(const MyString& lhs, const MyString& rhs) +{ + return strcmp(lhs.c_str(), rhs.c_str()) < 0; + +} + +MyString::MyString(MyString&& otherString) +{ + str = otherString.str; + size = otherString.size; + otherString.str = nullptr; + std::cout << "move constr" << std::endl; +} + +MyString& MyString::operator=(MyString&& otherString) +{ + std::cout << "move op=" << std::endl; + + if (this != &otherString) + { + free(); + str = otherString.str; + otherString.str = nullptr; + size = otherString.size; + } + return *this; }
\ No newline at end of file diff --git a/Sem. 10/MyString/MyString.h b/Sem. 10/Examples/MyString/MyString.h index 9e54287..334e863 100644 --- a/Sem. 10/MyString/MyString.h +++ b/Sem. 10/Examples/MyString/MyString.h @@ -1,41 +1,41 @@ -#pragma once
-
-#include <fstream>
-class MyString
-{
- char* str;
- size_t size;
-
- void copyFrom(const MyString& other);
- void free();
-
-public:
- MyString();
- MyString(const char*);
-
- MyString(const MyString&);
-
- MyString(MyString&&); //move constructor that accepts rvalue;
-
- MyString& operator=(const MyString& other);
- MyString& operator=(MyString&& other); //move op= that accepts rvalue;
-
- ~MyString();
-
- size_t getSize() const;
- void concat(const MyString& other);
-
- const char* c_str() const;
-
- MyString& operator+=(const MyString& other);
-
- friend std::ostream& operator<<(std::ostream& stream, const MyString& str);
- friend std::istream& operator>>(std::istream& stream, MyString& str);
-
-};
-
-MyString operator+(const MyString& lhs, const MyString& rhs);
-
-bool operator==(const MyString& lhs, const MyString& rhs);
-bool operator<=(const MyString& lhs, const MyString& rhs);
-bool operator<(const MyString& lhs, const MyString& rhs);
+#pragma once + +#include <fstream> +class MyString +{ + char* str; + size_t size; + + void copyFrom(const MyString& other); + void free(); + +public: + MyString(); + MyString(const char*); + + MyString(const MyString&); + + MyString(MyString&&); //move constructor that accepts rvalue; + + MyString& operator=(const MyString& other); + MyString& operator=(MyString&& other); //move op= that accepts rvalue; + + ~MyString(); + + size_t getSize() const; + void concat(const MyString& other); + + const char* c_str() const; + + MyString& operator+=(const MyString& other); + + friend std::ostream& operator<<(std::ostream& stream, const MyString& str); + friend std::istream& operator>>(std::istream& stream, MyString& str); + +}; + +MyString operator+(const MyString& lhs, const MyString& rhs); + +bool operator==(const MyString& lhs, const MyString& rhs); +bool operator<=(const MyString& lhs, const MyString& rhs); +bool operator<(const MyString& lhs, const MyString& rhs); diff --git a/Sem. 10/Queue.hpp b/Sem. 10/Examples/Queue.hpp index f9321cc..76e4cf2 100644 --- a/Sem. 10/Queue.hpp +++ b/Sem. 10/Examples/Queue.hpp @@ -1,150 +1,150 @@ -#include <iostream>
-#include <exception>
-template <typename T>
-class MyQueue
-{
- T* data;
- size_t capacity;
- size_t size;
-
- size_t get;
- size_t put;
-
- void resize();
-
- void copyFrom(const MyQueue<T>& other);
- void free();
-public:
- MyQueue();
-
- MyQueue(const MyQueue<T>& other);
- MyQueue<T>& operator=(const MyQueue<T>& other);
-
- void push(const T& obj);
- void push(T&& obj); //позволява и местене
- void pop();
-
- const T& peek() const;
- bool isEmpty() const;
-
- ~MyQueue();
-
-};
-
-template <typename T>
-MyQueue<T>::MyQueue()
-{
- capacity = 4;
- data = new T[capacity];
- size = 0;
- get = put = 0;
-}
-
-template <typename T>
-void MyQueue<T>::push(const T& obj)
-{
- if (size == capacity)
- resize();
-
- data[put] = obj; //operator=
- (++put) %= capacity;
- size++;
-}
-
-template <typename T>
-void MyQueue<T>::push(T&& obj)
-{
- if (size == capacity)
- resize();
-
- data[put] = obj; //move operator =
- (++put) %= capacity;
- size++;
-}
-
-template <typename T>
-bool MyQueue<T>::isEmpty() const
-{
- return size == 0;
-}
-
-
-template <typename T>
-const T& MyQueue<T>::peek() const
-{
- if (isEmpty())
- throw std::logic_error("Empty queue!");
-
- return data[get];
-}
-
-template <typename T>
-void MyQueue<T>::pop()
-{
- if (isEmpty())
- throw std::logic_error("Empty queue!");
- (++get) %= capacity;
- size--;
-}
-
-template <typename T>
-void MyQueue<T>::resize()
-{
- T* resizedData = new T[capacity * 2];
- for (size_t i = 0; i < size; i++)
- {
- resizedData[i] = data[get];
- (++get) %= capacity;
- }
- capacity *= 2;
- delete[] data;
- data = resizedData;
- get = 0;
- put = size;
-}
-
-
-template <typename T>
-void MyQueue<T>::copyFrom(const MyQueue<T>& other)
-{
- data = new T[other.capacity];
- for (int i = 0; i < other.capacity; i++)
- data[i] = other.data[i];
-
- get = other.get;
- put = other.put;
-
- size = other.size;
- capacity = other.capacity;
-
-}
-
-template <typename T>
-void MyQueue<T>::free()
-{
- delete[] data;
-}
-
-template <typename T>
-MyQueue<T>::MyQueue(const MyQueue<T>& other)
-{
- copyFrom(other);
-
-}
-
-template <typename T>
-MyQueue<T>& MyQueue<T>::operator=(const MyQueue<T>& other)
-{
- if (this != &other)
- {
- free();
- copyFrom(other);
- }
- return *this;
-}
-
-template <typename T>
-MyQueue<T>::~MyQueue()
-{
- free();
+#include <iostream> +#include <exception> +template <typename T> +class MyQueue +{ + T* data; + size_t capacity; + size_t size; + + size_t get; + size_t put; + + void resize(); + + void copyFrom(const MyQueue<T>& other); + void free(); +public: + MyQueue(); + + MyQueue(const MyQueue<T>& other); + MyQueue<T>& operator=(const MyQueue<T>& other); + + void push(const T& obj); + void push(T&& obj); //позволява и местене + void pop(); + + const T& peek() const; + bool isEmpty() const; + + ~MyQueue(); + +}; + +template <typename T> +MyQueue<T>::MyQueue() +{ + capacity = 4; + data = new T[capacity]; + size = 0; + get = put = 0; +} + +template <typename T> +void MyQueue<T>::push(const T& obj) +{ + if (size == capacity) + resize(); + + data[put] = obj; //operator= + (++put) %= capacity; + size++; +} + +template <typename T> +void MyQueue<T>::push(T&& obj) +{ + if (size == capacity) + resize(); + + data[put] = obj; //move operator = + (++put) %= capacity; + size++; +} + +template <typename T> +bool MyQueue<T>::isEmpty() const +{ + return size == 0; +} + + +template <typename T> +const T& MyQueue<T>::peek() const +{ + if (isEmpty()) + throw std::logic_error("Empty queue!"); + + return data[get]; +} + +template <typename T> +void MyQueue<T>::pop() +{ + if (isEmpty()) + throw std::logic_error("Empty queue!"); + (++get) %= capacity; + size--; +} + +template <typename T> +void MyQueue<T>::resize() +{ + T* resizedData = new T[capacity * 2]; + for (size_t i = 0; i < size; i++) + { + resizedData[i] = data[get]; + (++get) %= capacity; + } + capacity *= 2; + delete[] data; + data = resizedData; + get = 0; + put = size; +} + + +template <typename T> +void MyQueue<T>::copyFrom(const MyQueue<T>& other) +{ + data = new T[other.capacity]; + for (int i = 0; i < other.capacity; i++) + data[i] = other.data[i]; + + get = other.get; + put = other.put; + + size = other.size; + capacity = other.capacity; + +} + +template <typename T> +void MyQueue<T>::free() +{ + delete[] data; +} + +template <typename T> +MyQueue<T>::MyQueue(const MyQueue<T>& other) +{ + copyFrom(other); + +} + +template <typename T> +MyQueue<T>& MyQueue<T>::operator=(const MyQueue<T>& other) +{ + if (this != &other) + { + free(); + copyFrom(other); + } + return *this; +} + +template <typename T> +MyQueue<T>::~MyQueue() +{ + free(); }
\ No newline at end of file diff --git a/Sem. 10/Source.cpp b/Sem. 10/Examples/Source.cpp index d8a6036..57d464f 100644 --- a/Sem. 10/Source.cpp +++ b/Sem. 10/Examples/Source.cpp @@ -1,40 +1,40 @@ -#include <iostream>
-#include "MyString/MyString.h"
-#include "Queue.hpp"
-int main()
-{
- {
- MyQueue<size_t> q;
-
- q.push(3);
- q.push(10);
-
- std::cout << q.peek() << std::endl;
- q.pop();
-
- std::cout << q.peek() << std::endl;
- q.pop();
-
- }
- {
- MyQueue<MyString> q;
-
- MyString name = "Ivan";
-
- q.push(std::move(name)); //so it could call push(MyString&&)
-
- MyString name2 = "Petur";
- q.push(name2); //push(const MyString&)
-
- q.push("Alex");//push(MyString&&)
-
- std::cout << q.peek() << std::endl;
- q.pop();
-
- std::cout << q.peek() << std::endl;
- q.pop();
-
- std::cout << q.peek() << std::endl;
- q.pop();
- }
-}
+#include <iostream> +#include "MyString/MyString.h" +#include "Queue.hpp" +int main() +{ + { + MyQueue<size_t> q; + + q.push(3); + q.push(10); + + std::cout << q.peek() << std::endl; + q.pop(); + + std::cout << q.peek() << std::endl; + q.pop(); + + } + { + MyQueue<MyString> q; + + MyString name = "Ivan"; + + q.push(std::move(name)); //so it could call push(MyString&&) + + MyString name2 = "Petur"; + q.push(name2); //push(const MyString&) + + q.push("Alex");//push(MyString&&) + + std::cout << q.peek() << std::endl; + q.pop(); + + std::cout << q.peek() << std::endl; + q.pop(); + + std::cout << q.peek() << std::endl; + q.pop(); + } +} |
