질문 게시판 / Q&A

벡터를 스택처럼 쓰면 시간이 더 걸리나요?

by rhs0610, 10월 18일, 19:00

자료를 다 넣고 정렬까지 해야되는 경우가 있어서 스택에 넣기보다는 벡터에 넣은다음에 pop()과 top()함수를 pop_back()과 back() 함수로 대체해서 썼는데,
이런 경우 혹시 시간이 더 걸리거나 하는 안 좋은 점이 있는지 궁금합니다.

prof , 10월 18일, 22:35
 제한을 두면 나쁠 것 같지만요... 그게 아닌 경우도 있습니다.
예를 들어 python에서는

a= 10
a = "good boy"
이래도 아무런 문제가 없지만

C/C++에서 이러면 난리가 나죠. compile time때요.
수행도 하기 전부터 그렇죠. 이렇게 제한을 하면, compile때부터
나중에 run time 때 에러를 크게 줄일 수 있습니다.

좀 다른 이야기지만
문화나 관습도 이런 면이 있습니다. 젊은 사람들이 보기에는
아무짝에도 없는 제한, 제약같지만
거의 모든 문화나 관습은 나름대로 기능이 있습니다.
그 사회에 나름의 기여를 합니다.

좀 어려운 말로 하자면 "구조 기능주의"라고 하는데요.
인도에서 소를 잡아먹지 않는 것에는 나름의,
그 사회 고유의 기능이 있기 때문이다. - 이런 주장이죠. 
rhs0610 , 10월 18일, 22:34
 답변 감사합니다! 
prof , 10월 18일, 21:24
 아주 좋은 질문입니다.....아주 
prof , 10월 18일, 21:22
 그렇지 않을겁니다.
둘 다 기본 내부구조는 deque를 사용하기 때문에
차이가 나지 않아야 정상입니다.

스택은 deque에 어댑터(adaptor)를 끼워 넣은 것이라
본질적으로는 같습니다. 

어떤 경우 제한이 있는 경우가 더 좋을 수가 있습니다.
코딩에 에러가 없거든요. push ( ) , pop( )만 필요한 경우에는
이것만 쓰는 것이 좋습니다.

deque나 array를 stack이나 queue로 사용할 수도 있는데
이 경우 중간 원소를 삭제, 또는 추가 가능합니다.
워험하죠. 

stack <int> Q ; 에서 Q[3] 이러면 에러가 납니다.
미리 정한 일이 아닌 짓을 하면 에러가 나와야 합니다.
그게 stack, queue의 철학입니다.

요약: vector를 stack으로 사용해도 되지만, 
        언젠가는 크게 사고가 터질 날이 있을 겁니다.