42Seoul/CPP Module 08

ex01

재윤 2024. 2. 9. 19:25
반응형

들어가기 전 보고 가자!

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