STL을 해놓으시면 자료구조 그자체 또는 그 자료구조를 가지고 처리해야할 기본적인 알고리즘에 대한 삽질이 많이 줄어들 수 있습니다.
template을 이용하기때문에 그 범용성에도 불구하고 성능이 많이 떨어지지도 않고, 검증되어있다는 것이 큰 메리트입니다.
그리고 저 개인적으론 Josuttis의 The C++ Standard Library책을 더 추천합니다..
위의 분 중 어떤 분이 deque에 대해 언급을 하셨는데..
제 경우에는 온라인게임서버에서 방목록을 유지할 때 deque를 사용하고 있습니다.
방목록은 개설된 시간에 따라 순차적으로 보여져야 한다는 점에서 우선 map계열들을 사용하지 않았구요..(물론 key값을 현재시간값+특정값 을 이용해서 만들면 map계열을 써도 되긴 하겠지요)
방목록을 전부 보여줘야 하는 경우가 많은데 이 것이 O(n)에 가능하고(가장 많은 오버헤드가 가해질 연산이라고 생각합니다), random access가능, 방 생성시 push_back을 하면 버퍼크기가 바뀔 때를 제외하곤 O(1)에 가능하다는 점이 유용했습니다.
여기까지는 vector를 써도 마찬가지이지만.. 중요한 점은 방을 삭제할 경우 어떻게 처리되느냐 였는데.. 시간 순으로 방들 정보를 가지고 있다고 할 경우 아무래도 먼저 만들어진 방이 (즉 자료구조의 앞쪽에 놓여있는 방이) 삭제될 가능성이 많다고 생각되어서.. 맨 앞쪽에 대한 삭제연산의 성능이 좋은 deque를 사용하게 되었습니다.
이 deque사용은.. 저도 이 걸 쓰는 것이 과연 제 상황에서 가장 좋은 선택일 것인가에 대한 의문을 가지고 있기때문에 혹시 더욱 적절할 자료구조가 있으면 알려주시면 감사하겠네요 ㅎㅎ
haskell 이나 ML 같은 함수형 언어를 써보십시오.
제가 대학 합격하고 나서 C++ 뉴스그룹에서 놀고
있을때 지금은 블루엣에 계시는, 당시 동아대학교
대학원생이셨던 김재우님께서 해준 조언입니다.
좀 이상하게 들리는 조언이었지만 두고 두고 감사하고
있습니다. 제 전공분야 선택에 결정적인 역할을 해
버리고 말았습니다.
C++ 템플릿 자체가 ML functor 에서 상당 부분
아이디어를 빌려 왔습니다. (C++ 창시자 본인이
그렇게 말한 것으로 압니다.) STL 역시 함수형
언어 몇 Generic Programming 에 대해 연구하던
연구자들이 실세계에 자신들의 연구결과를 적용해서
대박을 터뜨린 쾌거입니다. STL 디자인이 좋아서
사실 원래는 계획하지 않았던 템플릿 기능들이 더
확장되었습니다.
함수형 언어를 공부하시고 나면, 예전에 STL 이라
불린 C++ 표준라이브러리에 대해 훨씬 더 잘
이해할 수 있을 뿐더러, 그것으로 다 하지 못하는
것에 대해 불편함이나 안달까지 느끼게 될 것입니다.
^^ 화이팅!
잘 선택하신 겁니다.
어디까지 읽으셨는지 모르겠습니다만 STL Tutorial & Refernce Guide 는 아주 조금 원론적입니다.
source 가 이해가 간다면 문제없이 장점을 찾으실 수 있을 거라고 봅니다.
하여간 모든 기술은 필요한만큼 쓰면 됩니다.
저의 경우 deque 의 쓸모를 아직 모르겠군요.
만약 게임을 만드는데 item이라는 클래스가 있다고 칩시다.그러면
만약 게임을 만드는데 item이라는 클래스가 있다고 칩시다.
그러면 게임 상에서 아이템이 늘어날때마다 이것을 추가하려면 C스타일에서는 큰 배열을 잡아놓던지, malloc(new)로 동적 메모리 할당을 해야 합니다.
이것을 stl을 사용하면 간단하게 추가, 삭제가 가능하죠.
STL은 C++ 템플릿 라이브러이 중에 하나입니다.C++에 대해서 공
STL은 C++ 템플릿 라이브러이 중에 하나입니다.
C++에 대해서 공부를 하신다면 프로그래밍 패러다임, 즉 객체 중심 프로그래밍에 대한 개념을 가지고 있어야 합니다.
제어 흐름 중심의 절차적인 프로그램과 다르게 객체 중심의 프로그래밍은 언뜻 봐서는 이해가 잘안되실겁니다. 그 밑바탕에 있는 것을 이해를 하셔야 코드가 눈에 들어 올겁니다.
하나씩 차근히 하시다 보면 어느순간 아하! 하실겁니다. 열심히 하세요..^_~
흐음...
STL은 객체지향 + Generic Programming입니다..
STL은 객체지향 + Generic Programming입니다..
STL을 해놓으시면 자료구조 그자체 또는 그 자료구조를 가지고 처리해야할 기본적인 알고리즘에 대한 삽질이 많이 줄어들 수 있습니다.
template을 이용하기때문에 그 범용성에도 불구하고 성능이 많이 떨어지지도 않고, 검증되어있다는 것이 큰 메리트입니다.
그리고 저 개인적으론 Josuttis의 The C++ Standard Library책을 더 추천합니다..
위의 분 중 어떤 분이 deque에 대해 언급을 하셨는데..
제 경우에는 온라인게임서버에서 방목록을 유지할 때 deque를 사용하고 있습니다.
방목록은 개설된 시간에 따라 순차적으로 보여져야 한다는 점에서 우선 map계열들을 사용하지 않았구요..(물론 key값을 현재시간값+특정값 을 이용해서 만들면 map계열을 써도 되긴 하겠지요)
방목록을 전부 보여줘야 하는 경우가 많은데 이 것이 O(n)에 가능하고(가장 많은 오버헤드가 가해질 연산이라고 생각합니다), random access가능, 방 생성시 push_back을 하면 버퍼크기가 바뀔 때를 제외하곤 O(1)에 가능하다는 점이 유용했습니다.
여기까지는 vector를 써도 마찬가지이지만.. 중요한 점은 방을 삭제할 경우 어떻게 처리되느냐 였는데.. 시간 순으로 방들 정보를 가지고 있다고 할 경우 아무래도 먼저 만들어진 방이 (즉 자료구조의 앞쪽에 놓여있는 방이) 삭제될 가능성이 많다고 생각되어서.. 맨 앞쪽에 대한 삭제연산의 성능이 좋은 deque를 사용하게 되었습니다.
이 deque사용은.. 저도 이 걸 쓰는 것이 과연 제 상황에서 가장 좋은 선택일 것인가에 대한 의문을 가지고 있기때문에 혹시 더욱 적절할 자료구조가 있으면 알려주시면 감사하겠네요 ㅎㅎ
haskell 이나 ML 같은 함수형 언어를 써보십시오.제가 대학 합
haskell 이나 ML 같은 함수형 언어를 써보십시오.
제가 대학 합격하고 나서 C++ 뉴스그룹에서 놀고
있을때 지금은 블루엣에 계시는, 당시 동아대학교
대학원생이셨던 김재우님께서 해준 조언입니다.
좀 이상하게 들리는 조언이었지만 두고 두고 감사하고
있습니다. 제 전공분야 선택에 결정적인 역할을 해
버리고 말았습니다.
C++ 템플릿 자체가 ML functor 에서 상당 부분
아이디어를 빌려 왔습니다. (C++ 창시자 본인이
그렇게 말한 것으로 압니다.) STL 역시 함수형
언어 몇 Generic Programming 에 대해 연구하던
연구자들이 실세계에 자신들의 연구결과를 적용해서
대박을 터뜨린 쾌거입니다. STL 디자인이 좋아서
사실 원래는 계획하지 않았던 템플릿 기능들이 더
확장되었습니다.
함수형 언어를 공부하시고 나면, 예전에 STL 이라
불린 C++ 표준라이브러리에 대해 훨씬 더 잘
이해할 수 있을 뿐더러, 그것으로 다 하지 못하는
것에 대해 불편함이나 안달까지 느끼게 될 것입니다.
^^ 화이팅!
--
There's nothing so practical as a good theory. - Kurt Lewin
"하스켈로 배우는 프로그래밍" http://pl.pusan.ac.kr/~haskell/
Re: 잘 선택하신 겁니다.
queue에 가장 효율적인 자료구조가 바로 deque입니다.....
승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스
1. 자료구조에 대한 표준의 템플릿 라이브러리를 제공한다.2. 알고리
1. 자료구조에 대한 표준의 템플릿 라이브러리를 제공한다.
2. 알고리즘에 관한 표준의 함수들을 제공한다.
이것만으로도 충분히 유용성은 있지만..
STL 은
3. 제너릭한 프로그래밍을 가능하게 해준다.
4. 많은 자료구조에 대해 비슷한 (혹은 같은) 접근 방법을 제시한다.
등등의 많은 장점을 줍니다.
아마 질문하신 분은 "표준" 의 장점을 몸으로 못 느껴보셨을듯 싶습니다.
- zoops -