다음을 통해 공유


stack 수업

최근에 일부 기본 컨테이너 형식에 추가된 요소로만 액세스를 제한하는 템플릿 컨테이너 어댑터 클래스입니다. 이 stack 클래스는 컨테이너에서 작업만 stack 수행되고 있음을 명확히 하는 것이 중요할 때 사용됩니다.

구문

template <class Type, class Container= deque <Type>>
class stack

매개 변수

Type
스택에 저장되는 요소 데이터 형식입니다.

Container
스택을 구현하는 데 사용된 기본 컨테이너의 형식입니다. 기본값은 클래스 deque<Type>입니다.

설명

스택 개체의 첫 번째 템플릿 매개 변수에 규정된 클래스 Type 의 요소는 동의어 value_type 이며 두 번째 템플릿 매개 변수로 규정된 기본 컨테이너 클래스 Container 의 요소 형식과 일치해야 합니다. Type 해당 형식의 개체를 복사하고 해당 형식의 변수에 값을 할당할 수 있도록 할당할 수 있어야 합니다.

스택에 적합한 기본 컨테이너 클래스에는 ,list 클래스 및 vector 클래스 또는 , push_backpop_back작업을 back지원하는 다른 시퀀스 컨테이너가 포함deque됩니다. 기본 컨테이너 클래스는 제한된 시퀀스 컨테이너 멤버 함수 집합만 공용 인터페이스로 표시하는 컨테이너 어댑터 내에서 캡슐화되어 있습니다.

개체는 stack 클래스 Type 의 요소가 같음과 비교할 수 있고 클래스의 요소가 비교할 수 없는 경우에만 비교 가능한 경우와 비교할 수 없는 경우에만 Type 같음입니다.

  • 이 클래스는 stack LIFO(Last-in, first-out) 데이터 구조를 지원합니다. 쌓여 있는 접시 더미의 예로 이해할 수 있습니다. 요소(접시)는 기본 컨테이너의 끝에 있는 마지막 요소인 스택의 맨 위에서만 삽입하거나 검사하거나 제거할 수 있습니다. 상위 요소에만 액세스하는 제한은 클래스를 사용하는 stack 이유입니다.

  • 이 클래스queue FIFO(선점) 데이터 구조를 지원합니다. 은행 창구 직원을 만나려고 줄 서 있는 사람들의 예로 이해할 수 있습니다. 요소(사람)는 줄의 뒤에 추가될 수 있고 줄의 앞에서 제거됩니다. 줄의 앞과 뒤는 모두 검사할 수 있습니다. 이러한 방식으로 전면 및 후면 요소에만 액세스하는 제한은 모피가 클래스를 queue 사용하는 이유입니다.

  • 클래스priority_queue 가장 큰 요소가 항상 맨 위 위치에 있도록 해당 요소를 정렬합니다. 이 클래스는 요소의 삽입과 최상위 요소의 검사 및 제거를 지원합니다. 나이, 키 또는 기타 조건을 기준으로 정렬된 줄을 선 사람들의 예로 이해할 수 있습니다.

멤버

생성자

속성 설명
stack 비어 있거나 기본 컨테이너 개체의 복사본인 stack을 생성합니다.

Typedef

속성 설명
container_type stack에서 조정할 기본 컨테이너를 제공하는 형식입니다.
size_type stack에서 요소 수를 표현할 수 있는 부호 없는 정수 형식입니다.
value_type stack에 있는 요소로 저장된 개체의 형식을 나타내는 형식입니다.

함수

속성 설명
empty stack이 비어 있는지를 테스트합니다.
pop stack의 맨 위에 있는 요소를 제거합니다.
push stack의 맨 위에 요소를 추가합니다.
size stack에 있는 요소 수를 반환합니다.
top stack의 맨 위에 있는 요소에 대한 참조를 반환합니다.

container_type

조정할 기본 컨테이너를 제공하는 형식입니다.

typedef Container container_type;

설명

이 형식은 템플릿 매개 변수 Container의 동의어입니다. 세 가지 C++ 표준 라이브러리 시퀀스 컨테이너 클래스( vector 클래스, list 클래스 및 기본 클래스 deque )는 모두 개체의 기본 컨테이너 stack 로 사용되어야 하는 요구 사항을 충족합니다. 이러한 요구 사항을 충족하는 사용자 정의 형식도 사용할 수 있습니다.

자세한 Container내용은 수업 항목의 설명 섹션을 stack 참조하세요 .

예시

선언하고 사용하는 container_type방법에 대한 stack::stack 예제는 예제를 참조하세요.

empty

스택이 비어 있는지 테스트합니다.

bool empty() const;

Return Value

true 스택이 비어 있으면 false 스택이 비어 있지 않으면

예시

// stack_empty.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>

int main( )
{
   using namespace std;
   // Declares stacks with default deque base container
   stack <int> s1, s2;

   s1.push( 1 );

   if ( s1.empty( ) )
      cout << "The stack s1 is empty." << endl;
   else
      cout << "The stack s1 is not empty." << endl;

   if ( s2.empty( ) )
      cout << "The stack s2 is empty." << endl;
   else
      cout << "The stack s2 is not empty." << endl;
}
The stack s1 is not empty.
The stack s2 is empty.

pop

stack의 가장 윗부분의 요소를 제거합니다.

void pop();

설명

구성원 함수를 적용하려면 스택이 비어 있지 않아야 합니다. 스택 맨 위 위치에는 가장 최근에 추가한 요소가 배치되며, 이 요소가 컨테이너 끝의 마지막 요소가 됩니다.

예시

// stack_pop.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>

int main( )
{
   using namespace std;
   stack <int> s1, s2;

   s1.push( 10 );
   s1.push( 20 );
   s1.push( 30 );

   stack <int>::size_type i;
   i = s1.size( );
   cout << "The stack length is " << i << "." << endl;

   i = s1.top( );
   cout << "The element at the top of the stack is "
        << i << "." << endl;

   s1.pop( );

   i = s1.size( );
   cout << "After a pop, the stack length is "
        << i << "." << endl;

   i = s1.top( );
   cout << "After a pop, the element at the top of the stack is "
        << i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
After a pop, the stack length is 2.
After a pop, the element at the top of the stack is 20.

push

스택의 맨 위에 요소를 추가합니다.

void push(const Type& val);

매개 변수

val
스택의 맨 위에 추가되는 요소입니다.

설명

스택 맨 위 위치에는 가장 최근에 추가한 요소가 배치되며, 이 요소가 컨테이너 끝의 마지막 요소가 됩니다.

예시

// stack_push.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>

int main( )
{
   using namespace std;
   stack <int> s1;

   s1.push( 10 );
   s1.push( 20 );
   s1.push( 30 );

   stack <int>::size_type i;
   i = s1.size( );
   cout << "The stack length is " << i << "." << endl;

   i = s1.top( );
   cout << "The element at the top of the stack is "
        << i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.

size

스택의 요소 수를 반환합니다.

size_type size() const;

Return Value

스택의 현재 길이입니다.

예시

// stack_size.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>

int main( )
{
   using namespace std;
   stack <int> s1, s2;
   stack <int>::size_type i;

   s1.push( 1 );
   i = s1.size( );
   cout << "The stack length is " << i << "." << endl;

   s1.push( 2 );
   i = s1.size( );
   cout << "The stack length is now " << i << "." << endl;
}
The stack length is 1.
The stack length is now 2.

size_type

스택에서 요소 수를 표현할 수 있는 부호 없는 정수 형식입니다.

typedef typename Container::size_type size_type;

설명

이 형식은 스택에 의해 조정되는 기본 컨테이너의 size_type과 동일한 의미입니다.

예시

선언하고 사용하는 size_type방법에 대한 size 예제는 예제를 참조하세요.

stack

비어 있거나 기본 컨테이너 개체의 복사본인 스택을 생성합니다.

stack();

explicit stack(const container_type& right);

매개 변수

right
생성된 스택이 복사본이 되는 컨테이너입니다.

예시

// stack_stack.cpp
// compile with: /EHsc
#include <stack>
#include <vector>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;

   // Declares stack with default deque base container
   stack <char> dsc1;

   //Explicitly declares a stack with deque base container
   stack <char, deque<char> > dsc2;

   // Declares a stack with vector base containers
   stack <int, vector<int> > vsi1;

   // Declares a stack with list base container
   stack <int, list<int> > lsi;

   // The second member function copies elements from a container
   vector<int> v1;
   v1.push_back( 1 );
   stack <int, vector<int> > vsi2( v1 );
   cout << "The element at the top of stack vsi2 is "
        << vsi2.top( ) << "." << endl;
}
The element at the top of stack vsi2 is 1.

top

stack의 가장 윗부분의 요소에 대한 참조를 반환합니다.

reference top();

const_reference top() const;

Return Value

스택의 맨 위에 있는 컨테이너의 마지막 요소에 대한 참조입니다.

설명

구성원 함수를 적용하려면 스택이 비어 있지 않아야 합니다. 스택 맨 위 위치에는 가장 최근에 추가한 요소가 배치되며, 이 요소가 컨테이너 끝의 마지막 요소가 됩니다.

반환 값 top 이 할당 const_reference된 경우 개체를 stack 수정할 수 없습니다. 반환 값 top 이 할당 reference된 경우 개체를 stack 수정할 수 있습니다.

예시

// stack_top.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>

int main( )
{
   using namespace std;
   stack <int> s1;

   s1.push( 1 );
   s1.push( 2 );

   int& i = s1.top( );
   const int& ii = s1.top( );

   cout << "The top integer of the stack s1 is "
        << i << "." << endl;
   i--;
   cout << "The next integer down is "<< ii << "." << endl;
}
The top integer of the stack s1 is 2.
The next integer down is 1.

value_type

스택에 있는 요소로 저장된 개체의 형식을 나타내는 형식입니다.

typedef typename Container::value_type value_type;

설명

이 형식은 스택에 의해 조정되는 기본 컨테이너의 value_type과 동일한 의미입니다.

예시

// stack_value_type.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>

int main( )
{
   using namespace std;
   // Declares stacks with default deque base container
   stack<int>::value_type AnInt;

   AnInt = 69;
   cout << "The value_type is AnInt = " << AnInt << endl;

   stack<int> s1;
   s1.push( AnInt );
   cout << "The element at the top of the stack is "
        << s1.top( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the top of the stack is 69.

참고 항목

C++ 표준 라이브러리의 스레드 보안
C++ 표준 라이브러리 참조