From 34ee83b8456a9b81e90564ea837694d879fae589 Mon Sep 17 00:00:00 2001 From: Alexandre POMMIER Date: Sun, 7 Aug 2022 23:54:00 +0200 Subject: [PATCH] first push cpp08 --- cpp08/ex01/Makefile | 7 +-- cpp08/ex01/Span.cpp | 33 +++++++++--- cpp08/ex01/Span.hpp | 14 +++-- cpp08/ex01/main.cpp | 102 ++++++++++++++++++++++++++++++++++++- cpp08/ex02/MutantStack.hpp | 48 +++++++++++++++++ cpp08/ex02/main.cpp | 67 ++++++++++++++++++++++++ 6 files changed, 256 insertions(+), 15 deletions(-) diff --git a/cpp08/ex01/Makefile b/cpp08/ex01/Makefile index 9546f13..e9a3139 100644 --- a/cpp08/ex01/Makefile +++ b/cpp08/ex01/Makefile @@ -6,16 +6,17 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/08/07 20:32:52 by apommier #+# #+# # -# Updated: 2022/08/07 20:33:01 by apommier ### ########.fr # +# Updated: 2022/08/07 22:48:52 by apommier ### ########.fr # # # # **************************************************************************** # NAME = a.out -SRCS = main.cpp +SRCS = main.cpp\ + Span.cpp OBJS = ${SRCS:.cpp=.o} CC = c++ -CFLAGS = -Wall -Wextra -Werror -std=c++98 +CFLAGS = -Wall -Wextra -Werror -std=c++98 -g RM = rm -rf .cpp.o: diff --git a/cpp08/ex01/Span.cpp b/cpp08/ex01/Span.cpp index cbddf19..75522fc 100644 --- a/cpp08/ex01/Span.cpp +++ b/cpp08/ex01/Span.cpp @@ -6,10 +6,12 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/07 20:32:51 by apommier #+# #+# */ -/* Updated: 2022/08/07 22:04:55 by apommier ### ########.fr */ +/* Updated: 2022/08/07 23:09:03 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ +#include "Span.hpp" + Span::Span() { this->_storageSize = 0; @@ -30,24 +32,43 @@ Span::~Span() } -void Span::addNumber() +void Span::addNumber(int nbr) { - + if ((int)this->_storage.size() >= this->_storageSize) + throw Span::fullContainer(); + this->_storage.push_back(nbr); } int Span::shortestSpan() { + std::vector tmp = this->_storage; + + if (this->_storage.size() < 2) + throw Span::notEnoughNumber(); + std::sort(tmp.begin(), tmp.end()); + int ret = tmp[1] - tmp[0]; + for (int i = 1; i < (int)tmp.size() - 1; i++) + { + //std::cout << "ret= " << ret << " | value = " << tmp[i + 1] - tmp[i] << " | tmp[i]= " << tmp[i+1] << " " << tmp[i]<< std::endl; + if (tmp[i + 1] - tmp[i] < ret) + ret = tmp[i + 1] - tmp[i]; + } + return (ret); } int Span::longestSpan() { - + if (this->_storage.size() < 2) + throw Span::notEnoughNumber(); + return (*max_element(this->_storage.begin(), this->_storage.end()) - *min_element(this->_storage.begin(), this->_storage.end())); } -void Span::addRangeOfIterators() +void Span::addRangeOfIterators(int *nb, int size) { - + if ((int)this->_storage.size() > this->_storageSize - size) + throw Span::fullContainer(); + this->_storage.insert(this->_storage.end(), nb, nb + size); } Span &Span::operator=( const Span &rhs ) diff --git a/cpp08/ex01/Span.hpp b/cpp08/ex01/Span.hpp index bded2f2..4df49d2 100644 --- a/cpp08/ex01/Span.hpp +++ b/cpp08/ex01/Span.hpp @@ -6,10 +6,14 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/07 20:33:52 by apommier #+# #+# */ -/* Updated: 2022/08/07 22:04:22 by apommier ### ########.fr */ +/* Updated: 2022/08/07 23:23:13 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ +#include +#include +#include + class Span{ public : @@ -17,17 +21,17 @@ class Span{ Span(unsigned int size); Span(const Span ©); ~Span(); - void addNumber(); + void addNumber(int); int shortestSpan(); int longestSpan(); - void addRangeOfIterators(); + void addRangeOfIterators(int *nb, int size); Span &operator=( const Span &rhs ); class fullContainer : public std::exception { char const *what() const throw() { - return ("Container is full !"); + return ("Container can't accept those number because he doesn't have enough memory !"); } }; @@ -42,4 +46,4 @@ class Span{ std::vector _storage; int _storageSize; -} \ No newline at end of file +}; \ No newline at end of file diff --git a/cpp08/ex01/main.cpp b/cpp08/ex01/main.cpp index a317382..0e12e92 100644 --- a/cpp08/ex01/main.cpp +++ b/cpp08/ex01/main.cpp @@ -6,11 +6,111 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/07 20:32:50 by apommier #+# #+# */ -/* Updated: 2022/08/07 20:33:25 by apommier ### ########.fr */ +/* Updated: 2022/08/07 23:16:52 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ +#include "Span.hpp" + int main() { + Span sp = Span(5); + sp.addNumber(6); + sp.addNumber(-3); + sp.addNumber(17); + sp.addNumber(9); + sp.addNumber(11); + try + { + sp.addNumber(110); + std::cout << "Container just accept some new values\n"; + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + std::cout << "shortest span : "<< sp.shortestSpan() << std::endl; + std::cout << "longest span : " << sp.longestSpan() << std::endl; + + std::cout << "\n======================Multiple nbr========================\n"; + Span sp2 = Span(15); + sp2.addNumber(6); + sp2.addNumber(-3); + sp2.addNumber(17); + sp2.addNumber(9); + sp2.addNumber(11); + try + { + int intTab[] = {0,1,2,3,4,5,6,7,8,-9}; + sp2.addRangeOfIterators(intTab, 10); + std::cout << "Container just accept some new values\n"; + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } +//bad + try + { + int intTab2[] = {0,1,2,3,4,5,6,7,8,-9}; + sp2.addRangeOfIterators(intTab2, 10); + std::cout << "Container just accept some new values\n"; + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + std::cout << "shortest span : "<< sp2.shortestSpan() << std::endl; + std::cout << "longest span : " << sp2.longestSpan() << std::endl; + std::cout << "\n======================Only one or two digit========================\n"; + Span sp3 = Span(15); + std::cout << "----with zero digit----\n"; + try + { + sp3.shortestSpan(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + try + { + sp3.longestSpan(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + std::cout << "----with one digit----\n"; + sp3.addNumber(6); + try + { + sp3.shortestSpan(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + try + { + sp3.longestSpan(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + + std::cout << "----with two digit----\n"; + sp3.addNumber(6); + try + { + std::cout << "shortest span : "<< sp3.shortestSpan() << std::endl; + std::cout << "longest span : " << sp3.longestSpan() << std::endl; + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + return 0; } \ No newline at end of file diff --git a/cpp08/ex02/MutantStack.hpp b/cpp08/ex02/MutantStack.hpp index e69de29..994e755 100644 --- a/cpp08/ex02/MutantStack.hpp +++ b/cpp08/ex02/MutantStack.hpp @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* MutantStack.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/08/07 23:20:42 by apommier #+# #+# */ +/* Updated: 2022/08/07 23:51:47 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include + +template +class MutantStack : public std::stack{ + public : + + MutantStack(){} + MutantStack( const MutantStack &src ) + { + *this = src; + } + ~MutantStack(){} + + MutantStack &operator=(const MutantStack &rhs) + { + (void)rhs; + return *this; + } + + typedef typename std::stack::container_type::iterator iterator; //simplify name + + iterator begin() + { + return this->c.begin(); //std::cbegin | std::begin + } + iterator end() + { + return this->c.end(); + } + + private : + +}; \ No newline at end of file diff --git a/cpp08/ex02/main.cpp b/cpp08/ex02/main.cpp index e69de29..458add4 100644 --- a/cpp08/ex02/main.cpp +++ b/cpp08/ex02/main.cpp @@ -0,0 +1,67 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/08/07 23:20:40 by apommier #+# #+# */ +/* Updated: 2022/08/07 23:37:58 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "MutantStack.hpp" + +int main_2() +{ + std::list mstack; + mstack.push_back(5); + mstack.push_back(17); + std::cout << mstack.back() << std::endl; + mstack.pop_back(); + std::cout << mstack.size() << std::endl; + mstack.push_back(3); + mstack.push_back(5); + mstack.push_back(737); + //[...] + mstack.push_back(0); + std::list::iterator it = mstack.begin(); + std::list::iterator ite = mstack.end(); + ++it; + --it; + while (it != ite) + { + std::cout << *it << std::endl; + ++it; + } + std::list s(mstack); + return (0); +} + +int main() +{ + MutantStack mstack; + mstack.push(5); + mstack.push(17); + std::cout << mstack.top() << std::endl; + mstack.pop(); + std::cout << mstack.size() << std::endl; + mstack.push(3); + mstack.push(5); + mstack.push(737); + //[...] + mstack.push(0); + MutantStack::iterator it = mstack.begin(); + MutantStack::iterator ite = mstack.end(); + ++it; + --it; + while (it != ite) + { + std::cout << *it << std::endl; + ++it; + } + std::stack s(mstack); + std::cout << "\n====================LIST CONTAINER TURN====================\n"; + main_2(); + return (0); +} \ No newline at end of file