2010-08-14 9 views
0

STL 클래스 벡터를 사용하여 스택을 만드는 MyStack이라는 템플릿 클래스를 구현합니다. MyStack 클래스에는 push()와 pop()의 두 가지 함수가 있습니다. MyStack은 템플릿 클래스이므로 모든 유형의 데이터 스택 (내장형 및 사용자 정의 유형 모두)을 생성하는 데 사용할 수있는 방식으로 작성해야합니다. 스택의 요소가 팝되면 (자), 벡터로부터 삭제되어 팝 된 데이터가 메모리를 사용하지 않게됩니다. main()에서 서로 다른 데이터 유형의 스택을 두 개 이상 만들고 샘플 데이터를 각각 푸시하고 해당 스택에서 데이터가 팝되면 데이터를 표시합니다.템플릿 클래스 및 벡터

+4

지금까지 어떤 시도를 해봤습니까? 특히 어딘가에 갇혀 있습니까? StackOverflow는 과제 완료 서비스가 아닙니다. – AshleysBrain

답변

0

직접 답변을 제공하지 않습니다. 하지만 당신이하고 싶은 것은 TYPE의 포인터를 가지고있는 클래스를 만드는 것입니다. 포인터가 이동하는 배열이 채워지면 정보를 새롭고 더 큰 배열에 복사 한 다음 이전 배열을 삭제합니다. 용량 및 현재 크기를 추적하십시오.

이 프로그램을 직접 프로그래밍 할 수 없으면 돌아가서 언어에 대해 자세히 알아볼 필요가 있습니다.

+0

그것은'std :: vector'를 다시 구현할 것입니다. 그는 구체적으로 그가'std :: vector'에 구축하고 있다고 말했습니다. – Potatoswatter

+0

@Potatoswatter - "yay skimming!" - 그래서 당신의 해결책이 더 낫습니다. –

2

std::vector을 축소하는 유일한 방법은 더 작은 벡터를 사용하는 swap입니다. 따라서 각 객체의 메모리를 해제 할 때마다 pop에 대해 전체 벡터를 복사하여 O(n) 작업으로 만듭니다.

이런 식으로하지 않거나 숙제 인 경우 구현이 너무 끔찍한 이유를 분명히 메모하거나 vector::pop_back은 실제로 무료로 제공되지 않습니다. <stack>에 덧붙여서

, std::stack가 할당을 처리하도록 std::vector를 사용 O(1) push()pop()을 구현한다.