쌓다 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(); } }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
- 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. 프로그램 로직은 이 기능 내에 추가되어야 합니다.
- 정수 값을 저장할 스택 st를 만듭니다.
- push() 함수를 사용하여 값 10을 스택에 삽입합니다.
- push() 함수를 사용하여 값 20을 스택에 삽입합니다.
- push() 함수를 사용하여 값 30을 스택에 삽입합니다.
- push() 함수를 사용하여 값 40을 스택에 삽입합니다.
- pop() 함수를 사용하여 스택에서 최상위 요소, 즉 40을 제거합니다. 이제 최상위 요소는 30이 됩니다.
- pop() 함수를 사용하여 스택에서 최상위 요소, 즉 30을 제거합니다. 이제 최상위 요소는 20이 됩니다.
- while 루프와 empty() 함수를 사용하여 스택이 비어 있지 않은지 확인합니다. !는 NOT 연산자입니다.
- 콘솔에 스택의 현재 내용을 인쇄합니다.
- 스택에서 pop() 함수를 호출합니다.
- while 루프 본문의 끝입니다.
- 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; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하십시오.
- 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함시킵니다.
- 스택 mystack을 생성하는 데 사용할 수 있는 createStack 함수를 생성합니다. 스택은 정수 세트를 보유합니다.
- createStack 함수 본문의 시작 부분입니다.
- mystack 데이터 유형의 인스턴스를 생성하고 ms라는 이름을 지정합니다.
- while 루프와 empty() 함수를 사용하여 스택이 비어 있는지 확인합니다.
- while 루프 본문의 시작입니다.
- 스택의 맨 위에 저장된 top() 함수를 사용합니다. \t 문자는 새 탭을 만듭니다.
- pop() 함수를 사용하여 스택 맨 위에 있는 요소를 삭제합니다.
- while 루프 본문의 끝입니다.
- 콘솔에 빈 줄을 인쇄합니다.
- createStack 함수 본문의 끝입니다.
- main() 함수를 호출합니다. 프로그램 로직은 main() 함수의 본문 내에 추가되어야 합니다.
- main() 함수 본문의 시작입니다.
- 스택 개체 st를 만듭니다.
- push() 함수를 사용하여 요소 32를 스택에 삽입합니다.
- push() 함수를 사용하여 요소 21를 스택에 삽입합니다.
- push() 함수를 사용하여 요소 39를 스택에 삽입합니다.
- push() 함수를 사용하여 요소 89를 스택에 삽입합니다.
- push() 함수를 사용하여 요소 25를 스택에 삽입합니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- createStack 함수를 호출하여 위의 삽입 작업을 스택에 실행합니다.
- 다른 텍스트와 함께 콘솔의 스택 크기를 인쇄합니다.
- 콘솔의 스택 맨 위에 있는 요소를 인쇄합니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- 스택의 맨 위에 있는 요소를 삭제합니다. 그런 다음 스택에 남아 있는 요소를 반환합니다.
- 위의 작업을 실행하려면 createStack 함수를 호출하세요.
- 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
- 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(); } }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
- 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하세요.
- 해당 기능을 사용하려면 코드에 cstdlib 헤더 파일을 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가됩니다.
- 정수 값을 저장하기 위해 st1이라는 스택을 선언합니다.
- 정수 값을 저장하기 위해 st2이라는 스택을 선언합니다.
- emplace() 함수를 사용하여 st12이라는 스택에 정수 1를 삽입합니다.
- emplace() 함수를 사용하여 st19이라는 스택에 정수 1를 삽입합니다.
- emplace() 함수를 사용하여 st20이라는 스택에 정수 2를 삽입합니다.
- emplace() 함수를 사용하여 st23이라는 스택에 정수 2를 삽입합니다.
- swap() 함수를 사용하여 두 스택 st1 및 st2의 내용을 교환합니다. 스택 st1의 내용은 스택 st2로 이동되어야 합니다. 스택 st2의 내용은 스택 st1로 이동되어야 합니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- while 문과 empty() 함수를 사용하여 스택 st1이 비어 있지 않은지 확인합니다.
- 콘솔에 스택 st1의 내용을 인쇄합니다. " "는 콘솔에 인쇄할 때 스택 요소 사이에 공간을 추가합니다.
- 스택 st1에서 pop() 함수를 실행하여 최상위 요소를 제거합니다.
- while 문의 본문 끝입니다.
- 콘솔에 일부 텍스트를 인쇄합니다. 엔드는 C++ 끝줄에 대한 키워드입니다. 마우스 커서를 다음 줄로 이동하여 거기에서 인쇄를 시작합니다.
- while 문과 empty() 함수를 사용하여 스택 st2이 비어 있지 않은지 확인합니다.
- 콘솔에 스택 st2의 내용을 인쇄합니다. " "는 콘솔에 인쇄할 때 스택 요소 사이에 공간을 추가합니다.
- 스택 st2에서 pop() 함수를 실행하여 최상위 요소를 제거합니다.
- while 문의 본문 끝입니다.
- 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(); }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
- 해당 기능을 사용하려면 코드에 스택 헤더 파일을 포함하세요.
- 해당 기능을 사용하려면 코드에 cstdlib 헤더 파일을 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
- 정수 데이터를 저장하기 위해 스택 st를 선언합니다.
- 스택에 요소 12를 추가합니다.
- 스택에 요소 19를 추가합니다.
- 스택에 요소 20를 추가합니다.
- 콘솔의 스택 맨 위에 있는 요소를 인쇄합니다.
- 콘솔에 스택 크기를 인쇄합니다.
- main() 함수 본문의 끝입니다.
제품 개요
- 스택은 LIFO(마지막에 들어온 데이터가 먼저 나감) 기술을 기반으로 동작하는 데이터 구조입니다.
- std::stack에서는 한쪽 끝에서만 항목을 추가하고 제거할 수 있습니다.
- std::stack 클래스는 유사한 데이터 유형의 항목을 보유하는 컨테이너 어댑터입니다.
- 스택은 다양한 시퀀스 컨테이너에서 생성될 수 있습니다.
- 컨테이너를 제공하지 않으면 기본적으로 deque 컨테이너가 사용됩니다.
- push() 함수는 스택에 항목을 삽입하는 함수입니다.
- pop() 함수는 단계에서 맨 위 항목을 제거하는 함수입니다.
- empty() 함수는 스택이 비어 있는지 여부를 확인하는 함수입니다.