dwhylee   7년 전

보통 스택을 사용할 일이 있으면 저는 그냥 vector 를 이용해서 스택처럼 쓰곤 합니다.

이번에 푼 문제의 경우에서는 stack 을 사용하나, vector로 사용하거나 시간은 똑같이 걸리더라구요.

vector는  [ ] 이 가능한게 편리해서 아무래도 계속 쓰게 되는것 같네요. stack 보다 좀 더 다양한 기능도 있고...

STL 많이 쓰라고 권장하는데 vector 또한 최적화가 되어있을 것 같은데,

stack 그 자체와 vector를 stack 처럼 쓰는것의 차이가 있는지 보통의 경우에는 시간이 어떻게 되는지 궁금해서 문의드립니다.보통의 경우에는 시간이 어떻게 되는지 궁금해서 문의드립니다.

 

yukariko   7년 전

스택과 벡터는 사용하는 용도가 다릅니다.

물론 벡터를 통해 스택의 모든 기능을 제공할 수 있고,

실제로도 C++에서 스택은 container adaptor로써 스택의 기능을 제공할 수 있는 모든 클래스를 스택의 구현체로 넣을 수 있습니다.

default는 deque이지만 stack<int, vector<int>> 를 사용하는것으로 내부에 벡터를 사용할 수 있죠.

하지만 기능이 많은것이 더 좋다라는 법은 없습니다.

스택은 특성상 Last In First Out(LIFO)로만 동작하기 때문에, stack으로 선언했다면 이 변수가 어떤 방식으로 동작할지를 쉽게 예상할 수 있습니다.

벡터로 선언했다면 배열로도 쓸 수 있기때문에 목적이 스택이라 해도 바로 눈치채기 힘들겠죠.

따라서 용도에 맞는 컨테이너의 사용은 코드의 가독성을 증가시켜줍니다.

성능의 경우는 내부 컨테이너를 어떤것을 사용하느냐에 따라 다를것입니다. vector를 내부로 사용한다면 vector와 똑같은 성능을 보이겠죠.

dwhylee   7년 전

@yukariko

:) 가독성 부분은 어느정도 그럴거라 생각했습니다. 그럼 대회 같은 것도 준비할 때
vector 보단 stack 을 쓰는게 더 명확하고 팀원이 이해하기도 쉽겠네요.

stackoverflow 에서는 스택의 넓은 범위가 벡터다 라고 표현도 하더라구요. 

성능의 경우 내부 컨테이너 사용에 따라 달라진다고 하셨는데, 이 부분좀 더 설명해주실 수 있나요?

vector를 내부로 사용한다는 뜻이 뭔지 이해가 안되네요.

yukariko   7년 전

http://www.cplusplus.com/reference/stack/stack/?kw...

이부분의 설명이 도움이 될것 같습니다.

요는 스택은 자체적으로 스택을 처리하는게 아니라 표현을 제한하는 껍데기일 뿐

실제로 구현을 담당하는것은 다른 컨테이너에게 위임한다고 생각하시면 됩니다.

dwhylee   7년 전

@yukariko

항상 답변 감사합니다 :)

댓글을 작성하려면 로그인해야 합니다.