diff --git a/ex01/Main.cpp b/ex01/Main.cpp index 8181c6f..f5afc6c 100644 --- a/ex01/Main.cpp +++ b/ex01/Main.cpp @@ -10,5 +10,18 @@ int main() sp.addNumber(11); std::cout << sp.shortestSpan() << std::endl; std::cout << sp.longestSpan() << std::endl; + + std::vector vec; + vec.push_back(42); + vec.push_back(1); + vec.push_back(99); + vec.push_back(7); + vec.push_back(55); + + Span sp2 = Span(5); + sp2.addNumber(vec.begin(), vec.end()); + std::cout << sp2.shortestSpan() << std::endl; + std::cout << sp2.longestSpan() << std::endl; + return 0; } diff --git a/ex01/Makefile b/ex01/Makefile index 30d8194..0b851b9 100644 --- a/ex01/Makefile +++ b/ex01/Makefile @@ -1,7 +1,7 @@ CXX = c++ CXXFLAGS = -Wall -Wextra -Werror -std=c++98 OBJDIR = obj -SOURCES = Main.cpp +SOURCES = Main.cpp Span.cpp OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o)) NAME = Span diff --git a/ex01/Span b/ex01/Span new file mode 100755 index 0000000..5766e55 Binary files /dev/null and b/ex01/Span differ diff --git a/ex01/Span.cpp b/ex01/Span.cpp index 79ed9e1..ca8632c 100644 --- a/ex01/Span.cpp +++ b/ex01/Span.cpp @@ -1 +1,59 @@ #include "Span.hpp" + +Span::Span() : _n(0) +{ +} + +Span::Span(unsigned int n) : _n(n) +{ +} + +Span::Span(const Span &other) : _n(other._n), _vec(other._vec) +{ +} + +Span &Span::operator=(const Span& other) +{ + if (this != &other) { + _n = other._n; + _vec = other._vec; + } + return *this; +} + +Span::~Span() +{ +} + +void Span::addNumber(int x) +{ + + if (this->_vec.size() >= this->_n) + throw std::out_of_range("Span vector is full"); + if (this->_vec.size() < this->_n) + this->_vec.push_back(x); +} + +int Span::longestSpan() const +{ + if (_vec.empty() || _vec.size() == 1) + throw std::out_of_range("Span vector has less than 2 values"); + std::vector::const_iterator maxIt = std::max_element(_vec.begin(), _vec.end()); + std::vector::const_iterator minIt = std::min_element(_vec.begin(), _vec.end()); + return (*maxIt - *minIt); +} + +int Span::shortestSpan() const +{ + if (_vec.empty() || _vec.size() == 1) + throw std::out_of_range("Span vector has less than 2 values"); + std::vector tempvec = _vec; + std::sort(tempvec.begin(), tempvec.end()); + int minspan = std::numeric_limits::max(); + for (size_t i = 0; i < _vec.size() - 1; ++i) { + int tempspan = tempvec[i + 1] - tempvec[i]; + if (tempspan < minspan) + minspan = tempspan; + } + return (minspan); +} diff --git a/ex01/Span.hpp b/ex01/Span.hpp index 9af7462..78c8d5a 100644 --- a/ex01/Span.hpp +++ b/ex01/Span.hpp @@ -1,8 +1,10 @@ #ifndef SPAN_HPP #define SPAN_HPP -#include +#include #include +#include +#include #include class Span @@ -22,6 +24,14 @@ class Span int longestSpan() const; void addNumber(int x); + template + void addNumber(Iterator begin, Iterator end) + { + while (begin != end) { + addNumber(*begin); + begin++; + } + } }; #endif diff --git a/ex01/obj/Main.o b/ex01/obj/Main.o new file mode 100644 index 0000000..4ca5710 Binary files /dev/null and b/ex01/obj/Main.o differ diff --git a/ex01/obj/Span.o b/ex01/obj/Span.o new file mode 100644 index 0000000..5d48f9a Binary files /dev/null and b/ex01/obj/Span.o differ