쌓다 C++ 예제가 포함된 STL

std::스택이 무엇인가요?

스택은 LIFO(Last In First Out) 기법을 기반으로 작동하는 데이터 구조입니다. std::stack을 사용하면 한쪽 끝에서만 요소를 추가하고 제거할 수 있습니다.

std::stack 클래스는 컨테이너 어댑터입니다. 컨테이너 개체는 유사한 데이터 유형의 데이터를 보유합니다. 다양한 시퀀스 컨테이너에서 스택을 생성할 수 있습니다. 컨테이너가 제공되지 않으면 기본적으로 deque 컨테이너가 사용됩니다. 컨테이너 어댑터는 반복자를 지원하지 않으므로 데이터를 조작하는 데 사용할 수 없습니다.

스택 구문

스택을 생성하려면 다음을 포함해야 합니다. 우리 코드의 헤더 파일. 그런 다음 이 구문을 사용하여 std::stack을 정의합니다.

template <class Type, class Container = deque<Type> > class stack;
  • 타입 – std::stack에 포함된 요소의 유형입니다. 어떤 것이든 유효할 수 있습니다. C++ 유형 또는 사용자 정의 유형.
  • 컨테이너 – 기본 컨테이너 객체의 유형입니다.

회원 유형

스택 멤버 유형은 다음과 같습니다.

  • value_type - 첫 번째 템플릿 매개변수 T. 요소 유형을 나타냅니다.
  • 컨테이너_유형 - 두 번째 템플릿 매개변수인 컨테이너입니다. 이는 기본 컨테이너 유형을 나타냅니다.
  • size_type - 부호 없는 정수 유형입니다.

Opera스택의 옵션

A C++ 스택은 다음과 같은 기본 작업을 지원합니다.

  • push – 스택에 항목을 추가/푸시합니다.
  • pop - 스택에서 항목을 제거/팝합니다.
  • peek – 스택의 맨 위 항목을 제거하지 않고 반환합니다.
  • isFull – 스택이 가득 찼는지 확인합니다.
  • isEmpty – 스택이 비어 있는지 확인합니다.

스택 구현

스택 구현

단계 1) 처음에는 빈 스택이 있습니다. 빈 스택의 상단은 -1로 설정됩니다.

단계 2) 다음으로 요소 5를 스택에 푸시했습니다. 스택의 맨 위는 요소 5를 가리킵니다.

단계 3) 다음으로, 우리는 50번째 요소를 스택에 푸시했습니다. 스택의 맨 위가 이동하여 50번째 요소를 가리킵니다.

단계 4) 그런 다음 우리는 스택에서 맨 위 요소를 제거하는 팝 연산을 수행했습니다. 요소 50이 스택에서 팝되었습니다. 스택의 맨 위는 이제 요소 5를 가리킵니다.

푸시() 및 팝()

stack::push() 함수는 스택 맨 위에 새 항목을 추가합니다. 삽입 후 스택 크기가 1씩 증가합니다. 이 함수는 다음 구문을 사용합니다.

stack.push(value)

값은 스택에 삽입할 항목입니다.

stack:: pop() 함수는 스택의 최상위 요소를 제거합니다. 이것은 스택의 최신 항목입니다. 제거 후에는 스택 크기가 1씩 줄어듭니다. 함수 구문은 다음과 같습니다.

stack.pop()

이 함수는 매개변수를 사용하지 않습니다.

예 1 :

#include <iostream> 
#include <stack> 
using namespace std;
int main() {
	stack<int> st;
	st.push(10);
	st.push(20);
	st.push(30);
	st.push(40);
	
         st.pop();
	st.pop();

	while (!st.empty()) {
		cout << ' ' << st.top();
		st.pop();
	}
}

출력:

푸시() 및 팝()

다음은 코드의 스크린샷입니다.

푸시() 및 팝()

코드 설명 :

  1. 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
  2. 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하세요.
  3. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  4. main() 함수를 호출합니다. 프로그램 로직은 이 기능 내에 추가되어야 합니다.
  5. 정수 값을 저장할 스택 st를 만듭니다.
  6. push() 함수를 사용하여 값 10을 스택에 삽입합니다.
  7. push() 함수를 사용하여 값 20을 스택에 삽입합니다.
  8. push() 함수를 사용하여 값 30을 스택에 삽입합니다.
  9. push() 함수를 사용하여 값 40을 스택에 삽입합니다.
  10. pop() 함수를 사용하여 스택에서 최상위 요소, 즉 40을 제거합니다. 이제 최상위 요소는 30이 됩니다.
  11. pop() 함수를 사용하여 스택에서 최상위 요소, 즉 30을 제거합니다. 이제 최상위 요소는 20이 됩니다.
  12. while 루프와 empty() 함수를 사용하여 스택이 비어 있지 않은지 확인합니다. !는 NOT 연산자입니다.
  13. 콘솔에 스택의 현재 내용을 인쇄합니다.
  14. 스택에서 pop() 함수를 호출합니다.
  15. while 루프 본문의 끝입니다.
  16. main() 함수 본문의 끝입니다.

비어 있음(), 크기(), 상단()

스택에는 스택과 해당 값을 가지고 놀 때 사용할 수 있는 내장 함수가 있습니다. 여기에는 다음이 포함됩니다.

  • empty() - 스택이 비어 있는지 확인합니다.
  • size() - 스택의 크기, 즉 스택의 요소 수를 반환합니다.
  • top()- 상단의 스택 요소에 액세스합니다.

예 2 :

#include <iostream> 
#include <stack>  
using namespace std;
void createStack(stack <int> mystack)
{
	stack <int> ms = mystack;
	while (!ms.empty())
	{
		cout << '\t' << ms.top();
		ms.pop();
	}
	cout << '\n';
}
int main()
{
	stack <int> st;
	st.push(32);
	st.push(21);
	st.push(39);
	st.push(89);
	st.push(25);

	cout << "The stack st is: ";
	createStack(st);
	cout << "\n st.size() : " << st.size();
	cout << "\n st.top() : " << st.top();
	cout << "\n st.pop() : ";
	st.pop();
	createStack(st);
	return 0;
}

출력:

비어 있음(), 크기(), 상단()

다음은 코드의 스크린샷입니다.

비어 있음(), 크기(), 상단()

코드 설명 :

  1. 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하십시오.
  2. 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하십시오.
  3. 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함시킵니다.
  4. 스택 mystack을 생성하는 데 사용할 수 있는 createStack 함수를 생성합니다. 스택은 정수 세트를 보유합니다.
  5. createStack 함수 본문의 시작 부분입니다.
  6. mystack 데이터 유형의 인스턴스를 생성하고 ms라는 이름을 지정합니다.
  7. while 루프와 empty() 함수를 사용하여 스택이 비어 있는지 확인합니다.
  8. while 루프 본문의 시작입니다.
  9. 스택의 맨 위에 저장된 top() 함수를 사용합니다. \t 문자는 새 탭을 만듭니다.
  10. pop() 함수를 사용하여 스택 맨 위에 있는 요소를 삭제합니다.
  11. while 루프 본문의 끝입니다.
  12. 콘솔에 빈 줄을 인쇄합니다.
  13. createStack 함수 본문의 끝입니다.
  14. main() 함수를 호출합니다. 프로그램 로직은 main() 함수의 본문 내에 추가되어야 합니다.
  15. main() 함수 본문의 시작입니다.
  16. 스택 개체 st를 만듭니다.
  17. push() 함수를 사용하여 요소 32를 스택에 삽입합니다.
  18. push() 함수를 사용하여 요소 21를 스택에 삽입합니다.
  19. push() 함수를 사용하여 요소 39를 스택에 삽입합니다.
  20. push() 함수를 사용하여 요소 89를 스택에 삽입합니다.
  21. push() 함수를 사용하여 요소 25를 스택에 삽입합니다.
  22. 콘솔에 일부 텍스트를 인쇄합니다.
  23. createStack 함수를 호출하여 위의 삽입 작업을 스택에 실행합니다.
  24. 다른 텍스트와 함께 콘솔의 스택 크기를 인쇄합니다.
  25. 콘솔의 스택 맨 위에 있는 요소를 인쇄합니다.
  26. 콘솔에 일부 텍스트를 인쇄합니다.
  27. 스택의 맨 위에 있는 요소를 삭제합니다. 그런 다음 스택에 남아 있는 요소를 반환합니다.
  28. 위의 작업을 실행하려면 createStack 함수를 호출하세요.
  29. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  30. main() 함수 본문의 끝입니다.

emplace() 및 swap()

다음은 기타 내장 스택 함수입니다.

  • emplace()- 구성한 다음 스택 맨 위에 새 요소를 삽입합니다.
  • swap()- 스택 내용을 다른 스택의 내용과 교환합니다.

예 3 :

#include <iostream>    
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st1;
	stack<int> st2;

	st1.emplace(12);
	st1.emplace(19);

	st2.emplace(20);
	st2.emplace(23);

	st1.swap(st2);

	cout << "st1 = ";
	while (!st1.empty()) {
		cout << st1.top() << " ";
		st1.pop();
	}

	cout << endl << "st2 = ";
	while (!st2.empty()) {
		cout << st2.top() << " ";
		st2.pop();
	}
}

출력:

위치()&스왑()

다음은 코드의 스크린샷입니다.

위치()&스왑()

코드 설명 :

  1. 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
  2. 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하세요.
  3. 해당 기능을 사용하려면 코드에 cstdlib 헤더 파일을 포함하세요.
  4. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  5. main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가됩니다.
  6. 정수 값을 저장하기 위해 st1이라는 스택을 선언합니다.
  7. 정수 값을 저장하기 위해 st2이라는 스택을 선언합니다.
  8. emplace() 함수를 사용하여 st12이라는 스택에 정수 1를 삽입합니다.
  9. emplace() 함수를 사용하여 st19이라는 스택에 정수 1를 삽입합니다.
  10. emplace() 함수를 사용하여 st20이라는 스택에 정수 2를 삽입합니다.
  11. emplace() 함수를 사용하여 st23이라는 스택에 정수 2를 삽입합니다.
  12. swap() 함수를 사용하여 두 스택 st1 및 st2의 내용을 교환합니다. 스택 st1의 내용은 스택 st2로 이동되어야 합니다. 스택 st2의 내용은 스택 st1로 이동되어야 합니다.
  13. 콘솔에 일부 텍스트를 인쇄합니다.
  14. while 문과 empty() 함수를 사용하여 스택 st1이 비어 있지 않은지 확인합니다.
  15. 콘솔에 스택 st1의 내용을 인쇄합니다. " "는 콘솔에 인쇄할 때 스택 요소 사이에 공간을 추가합니다.
  16. 스택 st1에서 pop() 함수를 실행하여 최상위 요소를 제거합니다.
  17. while 문의 본문 끝입니다.
  18. 콘솔에 일부 텍스트를 인쇄합니다. 엔드는 C++ 끝줄에 대한 키워드입니다. 마우스 커서를 다음 줄로 이동하여 거기에서 인쇄를 시작합니다.
  19. while 문과 empty() 함수를 사용하여 스택 st2이 비어 있지 않은지 확인합니다.
  20. 콘솔에 스택 st2의 내용을 인쇄합니다. " "는 콘솔에 인쇄할 때 스택 요소 사이에 공간을 추가합니다.
  21. 스택 st2에서 pop() 함수를 실행하여 최상위 요소를 제거합니다.
  22. while 문의 본문 끝입니다.
  23. main() 함수 본문의 끝입니다.

STL의 스택

STL(Standard Template Library)은 공통적인 기능을 제공하는 템플릿 클래스와 함께 제공됩니다. C++ 데이터 구조. 따라서 STL에서도 스택을 구현할 수 있습니다. 우리는 이 라이브러리를 코드에 포함시키고 이를 사용하여 스택을 정의합니다.

stack<T> st; 

위 구문은 T 데이터 유형의 요소에 대한 스택을 선언합니다.

예 4 :

#include <iostream>      
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st;
	st.push(12);
	st.push(19);
	st.push(20);
	cout << st.top();   
	cout << st.size();  
}

출력:

STL의 스택

다음은 코드의 스크린샷입니다.

STL의 스택

코드 설명 :

  1. 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
  2. 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하세요.
  3. 해당 기능을 사용하려면 코드에 cstdlib 헤더 파일을 포함하세요.
  4. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  5. main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
  6. 정수 데이터를 저장하기 위해 스택 st를 선언합니다.
  7. 스택에 요소 12를 추가합니다.
  8. 스택에 요소 19를 추가합니다.
  9. 스택에 요소 20를 추가합니다.
  10. 콘솔의 스택 맨 위에 있는 요소를 인쇄합니다.
  11. 콘솔에 스택 크기를 인쇄합니다.
  12. main() 함수 본문의 끝입니다.

제품 개요

  • 스택은 LIFO(마지막에 들어온 데이터가 먼저 나감) 기술을 기반으로 동작하는 데이터 구조입니다.
  • std::stack에서는 한쪽 끝에서만 항목을 추가하고 제거할 수 있습니다.
  • std::stack 클래스는 유사한 데이터 유형의 항목을 보유하는 컨테이너 어댑터입니다.
  • 스택은 다양한 시퀀스 컨테이너에서 생성될 수 있습니다.
  • 컨테이너를 제공하지 않으면 기본적으로 deque 컨테이너가 사용됩니다.
  • push() 함수는 스택에 항목을 삽입하는 함수입니다.
  • pop() 함수는 단계에서 맨 위 항목을 제거하는 함수입니다.
  • empty() 함수는 스택이 비어 있는지 여부를 확인하는 함수입니다.