반응형
들어가기 전 보고 가자!
https://wo-dbs.tistory.com/179
vector max_element, min_element
→vector 컨테이너에서 최대값, 최소값을 구할 경우 for문을 작성할 수도 있지만 이는 복잡하다. 그래서 algorithm 라이브러리에 있는 max_element를 사용한다면 한줄로도 간단하게 최대값을 구할 수 있
wo-dbs.tistory.com
- 이번 문제는 컨테이너의 라이브러리를 사용해보는 문제.
문제 조건대로 한 번 구현해보자.
- 최대 N개의 정수를 저장할 수 있는 Span 클래스를 개발합니다. N은 부호 없는 int 변수이며 생성자에 전달되는 유일한 매개 변수입니다.
class Span{
private:
std::vector<int> vec;
unsigned int N;
- 이 클래스에는 Span에 단일 숫자를 추가하는 addNumber()라는 멤버 함수가 있습니다. 채우는 용도로 사용됩니다. 이미 N개의 요소가 저장된 경우 새 요소를 추가하려고 하면 예외가 발생합니다.
template <typename s>
void addNumbers(s b, s end)
{
for (; b != end; b++)
{
addNumber(*b);
}
}
- shortestSpan() 및longestSpan()
int Span::shortestSpan() const
{
try
{
if (this->vec.size() < 2)
throw std::runtime_error("vector size is under 2");
}
catch (const std::exception &e)
{
std::cerr << e.what() << '\\n';
return 0;
}
std::vector<int> sorted = sortVector();
long ret = LONG_MAX;
int prev;
for (std::vector<int>::iterator iter = sorted.begin(); iter != sorted.end(); iter++)
{
if (iter == sorted.begin())
{
prev = *iter;
}
else
{
ret = std::min(ret, static_cast<long>(*iter - prev));
prev = *iter;
}
}
return ret;
}
int Span::longestSpan() const
{
try
{
if (this->vec.size() < 2)
throw std::runtime_error("size is under 2");
}
catch (const std::exception &e)
{
std::cerr << e.what() << '\\n';
return 0;
}
return (*std::max_element(this->vec.begin(), this->vec.end()) - *std::min_element(this->vec.begin(), this->vec.end()));
}
반응형
'42Seoul > CPP Module 08' 카테고리의 다른 글
ex02 (0) | 2024.02.09 |
---|---|
ex00 (0) | 2024.02.09 |