#include #include #include #include Span::Span() : size(0) {} Span::Span(const Span& other) : numbers(other.numbers), size(other.size) {} Span::Span(unsigned int size) : size(size) {} void Span::addNumber(int number) { if (numbers.size() == size) throw std::length_error("Can't add number, it would exceed span size"); numbers.push_back(number); } int Span::shortestSpan() { if (numbers.empty()) throw std::logic_error("Can't find shortest span, no numbers stored"); if (numbers.size() == 1) throw std::logic_error("Can't find shortest span, only one number stored"); std::vector sortedNumbers(numbers); std::sort(sortedNumbers.begin(), sortedNumbers.end()); std::vector differences(sortedNumbers.size()); std::adjacent_difference(sortedNumbers.begin(), sortedNumbers.end(), differences.begin()); return *std::min_element(differences.begin() + 1, differences.end()); } int Span::longestSpan() { if (numbers.empty()) throw std::logic_error("Can't find longest span, no numbers stored"); if (numbers.size() == 1) throw std::logic_error("Can't find longest span, only one number stored"); return *std::max_element(numbers.begin(), numbers.end()) - *std::min_element(numbers.begin(), numbers.end()); } Span& Span::operator=(const Span& other) { if (this == &other) return *this; size = other.size; numbers = other.numbers; return *this; } Span::~Span() {}