#include #include #include #include #include "Span.hpp" Span::Span(void) : _size(0), _max_size(0) { } Span::Span(unsigned int size) : _size(0), _max_size(size) { } Span::Span(Span &other) : _size(other._size), _max_size(other._max_size) { this->_data = other._data; } Span &Span::operator=(Span &other) { this->_max_size = other._max_size; this->_size = other._size; this->_data = other._data; return *this; } Span::~Span(void) { } void Span::addNumber(int value) { if (_size == _max_size) throw std::runtime_error("max span size reached"); _size++; _data.push_back(value); } int Span::shortestSpan(void) { if (_size < 2) throw std::runtime_error("not enough values in the span"); std::vector sorted = _data; size_t shortest = std::numeric_limits::max(); std::sort(sorted.begin(), sorted.end()); for (unsigned int i = 0; i < _size - 1; i++) { if ((unsigned int)(sorted[i + 1] - sorted[i]) < shortest) shortest = sorted[i + 1] - sorted[i]; } return shortest; } int Span::longestSpan(void) { if (_size < 2) throw std::runtime_error("not enough values in the span"); std::vector::iterator min = std::min_element(_data.begin(), _data.end()); std::vector::iterator max = std::max_element(_data.begin(), _data.end()); return (*max - *min); }