45 lines
967 B
C++
45 lines
967 B
C++
#pragma once
|
|
|
|
#include <stdexcept>
|
|
#include <algorithm>
|
|
#include <iostream>
|
|
#include <limits>
|
|
#include <vector>
|
|
|
|
class Span {
|
|
public:
|
|
Span(void);
|
|
Span(const unsigned int &);
|
|
Span(const Span &);
|
|
Span &operator=(const Span &);
|
|
~Span(void);
|
|
|
|
void addNumber(const int &);
|
|
|
|
template <typename T>
|
|
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<int> getData(void) const {return _data;}
|
|
|
|
private:
|
|
std::vector<int> _data;
|
|
std::size_t _size;
|
|
std::size_t _max_size;
|
|
};
|
|
|
|
std::ostream &operator<<(std::ostream &os, const Span &s);
|