From 171a7b964bbb9ca6cf68e4b0c4dc81e9a15bde9e Mon Sep 17 00:00:00 2001 From: yosyo Date: Wed, 27 Aug 2025 16:29:09 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix(ex01/ex02)?= =?UTF-8?q?:=20fixed=20things=20that=20i=20forgot=20to=20do?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ex01/Span.cpp | 20 +++++++---- ex01/Span.hpp | 22 ++++++++++++ ex01/main.cpp | 39 ++++++++++++++++----- ex02/main.cpp | 96 +++++++++++++++++++++++++++++++++++++++++---------- 4 files changed, 145 insertions(+), 32 deletions(-) diff --git a/ex01/Span.cpp b/ex01/Span.cpp index 0391d86..b8f90b3 100644 --- a/ex01/Span.cpp +++ b/ex01/Span.cpp @@ -1,9 +1,3 @@ -#include -#include -#include - -#include - #include "Span.hpp" Span::Span(void) @@ -72,3 +66,17 @@ int Span::longestSpan(void) return (*max - *min); } + +std::ostream &operator<<(std::ostream &os, const Span &o) +{ + os << "(size = " << o.getSize() << ") "; + std::vector const &numbers = o.getData(); + for (unsigned int i = 0; i < numbers.size(); i++) + { + os << numbers[i]; + if (i != numbers.size() - 1) + os << ", "; + } + return os; +} + diff --git a/ex01/Span.hpp b/ex01/Span.hpp index 54c0e72..af2480d 100644 --- a/ex01/Span.hpp +++ b/ex01/Span.hpp @@ -1,5 +1,9 @@ #pragma once +#include +#include +#include +#include #include class Span { @@ -12,11 +16,29 @@ public: void addNumber(const int &); + template + void addNumbers(const typename T::const_iterator begin, const typename T::const_iterator end) + { + unsigned int csize = this->_size; + csize += std::distance(begin, end); + if (csize > this->_max_size) + throw std::length_error("iterator too big, can't add it"); + this->_data.insert(this->_data.end(), begin, end); + this->_size += std::distance(begin, end); + } + + + int shortestSpan(void); int longestSpan(void); + std::size_t getSize(void) const {return _size;} + std::vector getData(void) const {return _data;} + private: std::vector _data; std::size_t _size; std::size_t _max_size; }; + +std::ostream &operator<<(std::ostream &os, const Span &s); diff --git a/ex01/main.cpp b/ex01/main.cpp index 7677123..f65d3e7 100644 --- a/ex01/main.cpp +++ b/ex01/main.cpp @@ -1,15 +1,38 @@ #include "Span.hpp" #include +#include int main() { - Span sp = Span(5); - sp.addNumber(6); - sp.addNumber(3); - sp.addNumber(17); - sp.addNumber(9); - sp.addNumber(11); - std::cout << sp.shortestSpan() << std::endl; - std::cout << sp.longestSpan() << std::endl; + { + Span sp = Span(5); + sp.addNumber(6); + sp.addNumber(3); + sp.addNumber(17); + sp.addNumber(9); + sp.addNumber(11); + + std::cout << sp << std::endl; + std::cout << "shortest span: " << sp.shortestSpan() << std::endl; + std::cout << "longest span: " << sp.longestSpan() << std::endl; + } + + std::cout << std::endl; + + { + std::list list; + for (int i = 0; i < 10; i++) + { + list.push_back(rand() % 100); + } + + Span sp(list.size()); + sp.addNumbers >(list.begin(), list.end()); + + std::cout << sp << std::endl; + std::cout << "shortest span: " << sp.shortestSpan() << std::endl; + std::cout << "longest span: " << sp.longestSpan() << std::endl; + } + return 0; } diff --git a/ex02/main.cpp b/ex02/main.cpp index cb89be3..f5dd45c 100644 --- a/ex02/main.cpp +++ b/ex02/main.cpp @@ -1,28 +1,88 @@ #include "MutantStack.hpp" #include +#include 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; + std::cout << "control tests with a list:" << std::endl; + std::list mlist; + mlist.push_back(5); + mlist.push_back(17); + std::cout << mlist.back() << std::endl; + mlist.pop_back(); + std::cout << mlist.size() << std::endl; + mlist.push_back(3); + mlist.push_back(5); + mlist.push_back(727); + mlist.push_back(0); + + std::list::iterator it = mlist.begin(); + std::list::iterator ite = mlist.end(); ++it; + --it; + while (it != ite) + { + std::cout << *it << std::endl; + ++it; + } } - std::stack s(mstack); + std::cout << std::endl; + + { + std::cout << "basic iterator tests:" << std::endl; + 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(727); + mstack.push(0); + + MutantStack::iterator it = mstack.begin(); + MutantStack::iterator ite = mstack.end(); + ++it; + --it; + //*it = 20; // not a constant iterator, should be working if uncommented + while (it != ite) + { + std::cout << *it << std::endl; + ++it; + } + std::stack s(mstack); + } + std::cout << std::endl; + + { + std::cout << "const iterator tests:" << std::endl; + 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(727); + mstack.push(0); + + MutantStack::const_iterator it = mstack.begin(); + MutantStack::const_iterator ite = mstack.end(); + ++it; + --it; + //*it = 20; // a constant iterator, should not work if uncommented + while (it != ite) + { + std::cout << *it << std::endl; + ++it; + } + std::stack s(mstack); + } + std::cout << std::endl; + + return 0; }