산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

예제를 사용하여 C++ STL로 스택

std::stack이란 무엇입니까?

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

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

이 C++ 튜토리얼에서 배우게 될 것입니다.

스택 구문

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

을 정의합니다.
template <class Type, class Container = deque<Type> > class stack;

회원 유형

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

스택 작업

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

스택 구현

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. 팝() 함수를 사용하여 스택에서 맨 위 요소, 즉 30을 제거합니다. 이제 맨 위 요소는 20이 됩니다.
  12. while 루프와 empty() 함수를 사용하여 스택이 비어 있지 않은지 확인합니다. ! NOT 연산자입니다.
  13. 콘솔에 스택의 현재 내용을 인쇄합니다.
  14. 스택에서 pop() 함수를 호출합니다.
  15. while 루프 본문의 끝입니다.
  16. main() 함수 본문의 끝입니다.

빈(), 크기(), 상단()

스택에는 스택과 그 값을 가지고 놀 수 있는 기능이 내장되어 있습니다. 여기에는 다음이 포함됩니다.

예시 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. 팝() 함수를 사용하여 스택 맨 위에 있는 요소를 삭제합니다.
  11. while 루프 본문의 끝입니다.
  12. 콘솔에 빈 줄을 인쇄합니다.
  13. createStack 함수 본문의 끝입니다.
  14. main() 함수를 호출합니다. 프로그램 로직은 main() 함수의 본문에 추가되어야 합니다.
  15. main() 함수 본문의 시작입니다.
  16. stack 객체를 생성합니다.
  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()

다음은 다른 내장 스택 기능입니다.

예시 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() 함수를 사용하여 st1이라는 스택에 정수 12를 삽입합니다.
  9. emplace() 함수를 사용하여 st1이라는 스택에 정수 19를 삽입합니다.
  10. emplace() 함수를 사용하여 st2라는 스택에 정수 20을 삽입합니다.
  11. emplace() 함수를 사용하여 st2라는 스택에 정수 23을 삽입합니다.
  12. 스왑() 함수를 사용하여 두 스택 st1 및 st2의 내용을 교환합니다. 스택 st1의 내용을 스택 st2로 이동해야 합니다. 스택 st2의 내용을 스택 st1으로 이동해야 합니다.
  13. 콘솔에 일부 텍스트를 인쇄합니다.
  14. st1 스택이 비어 있지 않은지 확인하려면 while 문과 empty() 함수를 사용하십시오.
  15. 콘솔에 스택 st1의 내용을 인쇄합니다. " "는 콘솔에서 스택 요소를 인쇄할 때 스택 요소 사이에 공간을 추가합니다.
  16. st1 스택에서 pop() 함수를 실행하여 맨 위 요소를 제거합니다.
  17. while 문의 본문 끝.
  18. 콘솔에 일부 텍스트를 인쇄합니다. endl은 끝줄에 대한 C++ 키워드입니다. 마우스 커서를 다음 줄로 이동하여 거기에서 인쇄를 시작합니다.
  19. st2 스택이 비어 있지 않은지 확인하려면 while 문과 empty() 함수를 사용하십시오.
  20. 콘솔에 스택 st2의 내용을 인쇄합니다. " "는 콘솔에서 스택 요소를 인쇄할 때 스택 요소 사이에 공간을 추가합니다.
  21. st2 스택에서 pop() 함수를 실행하여 맨 위 요소를 제거합니다.
  22. while 문의 본문 끝.
  23. main() 함수 본문의 끝입니다.

STL 스택

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

stack<T> st; 

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

예시 3:

#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();  
}

출력:

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

코드 설명:

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

요약:


C 언어

  1. 예제가 있는 C++의 연산자:정의, 유형 및 프로그램
  2. C++ do… while 루프 예제
  3. EXAMPLE이 있는 C++ Switch Case 문
  4. 예제를 사용한 C++ 배열 동적 할당
  5. 예제가 있는 C++ 포인터
  6. 예제를 사용한 C++ 연산자 오버로딩
  7. 예제가 있는 C++ 구조체
  8. 인쇄 예제가 있는 C++ 표준 템플릿 라이브러리(STL)의 맵
  9. 예제가 있는 C++의 std::list
  10. 프로그램 예제가 있는 C++ 함수