SlideShare a Scribd company logo
1부 
프로그래밍 기법들 
1.4 게임 프로그래밍에서의 STL 활용 (James Boer) 
Page 83 ~ 100 
NHN NEXT, NEXON 라태웅
STL(Standard Template Library)이 공식적으로 생겨난 때는 1997년 
STL은 컨테이너(데이터의 모음) 클래스들의 모음 
deque list queue 
map multimap set multiset bitset 
등이 존재함 
priority_qu 
eue 
stack vector 
컨테이너는 시퀀스 컨테이너와 결합 컨테이너로 나뉨 
시퀀스 컨테이너 
원소들이 직선 순서대로 배치 
결합(연관) 컨테이너 
레드 블랙 트리, 균형 이진 트리 형태특정 위치에 대한 삽입이 허용되지 않음
반복자 
컨테이너 안의 요소들에 대한 포인터와 비슷한 개념 
++ 연산자로 반복자를 컨테이너 안의 다음 요소로 옮기는 것 
* 연산자로 반복자를 역참조해서 실제 데이터를 얻어오는 것 
알고리즘 
STL 클래스들에 대해 작동하는 알고리즘, 독립적인 함수로 존재 
데이터와 알고리즘을 분리시키기 위해 컨테이너에 포함되지 않음
주요 개념 
컨테이너의 시작 
begin() 
컨테이너의 끝 
end() 
주의! end()는 마지막 요소가 아니라 마지막 요소 다음의 유효하지 않은 위치를 가리킴 
STL 컨테이너들은 정보를 참조(by ref)가 아닌 값(by val)으로 전달 
크기가 큰 구조체나 클래스라면 포인터를 넘겨주도록 하는 것이 바람직 
그렇지 않으면 매 번의 삽입, 접근마다 객체의 복사를 위해 생성자가 호출된다. 
begin() … … … … end() 
data data data data data none
벡터 
동적으로 크기를 변경할 수 있는 배열 
주기적으로 메모리를 재할당하고 새 배열로 데이터를 전송할 수 있는 배열 
“크기가 변할 수 있는 배열”이라 함은, 
필요한 양 이상의 메모리를 할당할 수 있음 
벡터의 끝에 하나의 요소를 추가하는 작업은 “상각된“ 상수적 시간 
공간이 꽉 찬 경우, 
새 메모리를 할당하고, 기존 메모리에 있는 배열을 새 메모리로 복사하고, 
기존 메모리를 해제하는 추가적인 시간과 자원이 소모 
메모리를 재할당하면 반복자들이 무효화 
새로운 메모리를 할당하고 기존 메모리를 해제하기 때문 
메모리 재할당이 언제 일어나는지 이해해야 함
c.reverse(10) 
none none none none none 
none none none none none
c.push_back(3) 
c.begin() 
3 
c.end() 
none 
none none none 
none none none none none
c.push_back(99) 
c.begin() 
3 
99 
c.end() 
none 
none none 
none none none none none
c.push_back(99) 
c.begin() 
3 
99 43 
c.end() 
none 
none 
none none none none none
c[0] = 12 
c.begin() 
12 
99 43 
c.end() 
none 
none 
none none none none none
c[1] = 32 
c.begin() 
12 
32 43 
c.end() 
none 
none 
none none none none none
c[2] = 999 
c.begin() 
12 
32 999 
c.end() 
none 
none 
none none none none none
리스트 
이중 연결 리스트(Double Linked List)로 구현됨 
어떠한 요소 삽입이나 삭제도 상수적인 시간으로 수행됨 
연결 리스트이기 때문에 벡터나 데크처럼 특정 요소에 임의 접근은 불가능 
벡터와 정확히 동일한 방식으로 사용 가능 
push_front(), push_back 등
데크 
컨테이너의 양 끝에서 요소의 삽입과 제거가 일어남 
컨테이너 중간에서는 요소의 삽입이나 제거가 잦지 않을 때 사용 
벡터와 마찬가지로 양 끝에서 삽입과 삭제는 상각된 상수적 시간이 걸린다 
큐 자체 내부 데이터의 본성 때문에 임의 접근이 가능하지만 벡터보다 비효율적 
시작점이 제일 처음 위치가 아니거나, 등등 
none data none 
양 끝에서 삽입과 삭제가 일어날 수 있기 때문에 위와 같은 상태일 수 있음 
벡터와 달리 추가적인 메모리 할당을 결정할 수 없음
맵 
Key-Value 쌍을 담는 컨테이너 
해시 테이블보다는 비효율적이지만 속도의 차이는 무시할 수 있을 정도 
삽입과 함께 정렬이 수행 
즉, map의 데이터는 항상 정렬된 상태로 존재 
Key를 통해 값을 조회하는 데 걸리는 시간은 O(log n) 
균형 이진 트리 형태(혹은 레드 블랙 트리)의 구조 
때문에 O(log n)의 시간이 걸린다
스택 
push(), pop(), top()의 기본적인 멤버 함수를 제공 
size()와 empty()로 현재 상태를 알 수 있다 
스택은 기본적으로 하나의 deque로 구현 
stack<int> c; // deque stack 
stack<int, vector<int>> c; // vector stack 
push_back, pop_back, back() 함수를 제공하는 어떠한 컨테이너라도 vector대신 사용 가능 
pop()이나 top()을 수행할 때 항상 검사해야 함 
안전성보다는 속도를 우선으로 설계 
pop()과 top()을 할 때 스택에 요소가 있는지 size()나 empty()로 미리 점검해 주어야 함 
큐와 우선 순위 큐도 마찬가지
큐 
push(), pop(), front(), back()의 기본적인 멤버 함수를 제공 
size()와 empty()로 현재 상태를 알 수 있다 
back()이 요소가 삽입될 위치이다 
큐 또한 기본적으로 deque를 사용하나 변경 가능 
vector는 앞쪽에서 요소를 추가하거나 제거하면 나머지 요소들이 모두 밀리거나 당겨짐 
때문에 vector는 비효율적 
우선 순위 큐 
큐와 동일하나 삽입과 동시에 내림차순으로 정렬 
< 연산자를 기반으로 정렬 
때문에 세번째 인자로 사용자 정의 비교 함수를 넣을 수 있음 
포인터를 넣었을 경우 주소값을 비교하기 때문에 필수적
결론 
STL의 장단점을 잘 이해하면 코드의 속도나 무결성을 훼손하지 않고 강력한 기 
능을 최대한 활용할 수 있다 
STL은 그 자체만으로 책 한 권을 쓸 수 있는 방대한 주제 
이 글을 통해서 STL의 가능성과 매력만을 맛볼 수 있기를 바람
참고 자료 
The C++ Standard Library: A Tutorial and Reference 
The C++ Programming Language 
Designing Components with the C++

More Related Content

What's hot

[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study경 송
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)MIN SEOK KOO
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2Park Jonggun
 
Haskell study 12
Haskell study 12Haskell study 12
Haskell study 12Nam Hyeonuk
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
Haskell study 15
Haskell study 15Haskell study 15
Haskell study 15Nam Hyeonuk
 
[Swift] Iterator
[Swift] Iterator[Swift] Iterator
[Swift] IteratorBill Kim
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기Yong Joon Moon
 
Haskell study 14
Haskell study 14Haskell study 14
Haskell study 14Nam Hyeonuk
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 genericEunjoo Im
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Yong Joon Moon
 
Haskell study 13
Haskell study 13Haskell study 13
Haskell study 13Nam Hyeonuk
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편Yong Joon Moon
 
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Park Jonggun
 

What's hot (20)

[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2
 
Stl 컨테이너
Stl 컨테이너Stl 컨테이너
Stl 컨테이너
 
Haskell study 12
Haskell study 12Haskell study 12
Haskell study 12
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
Haskell study 15
Haskell study 15Haskell study 15
Haskell study 15
 
[Swift] Iterator
[Swift] Iterator[Swift] Iterator
[Swift] Iterator
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
 
Swift 0x17 generics
Swift 0x17 genericsSwift 0x17 generics
Swift 0x17 generics
 
Haskell study 8
Haskell study 8Haskell study 8
Haskell study 8
 
Haskell study 14
Haskell study 14Haskell study 14
Haskell study 14
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 generic
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
 
Haskell study 13
Haskell study 13Haskell study 13
Haskell study 13
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편
 
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1
 

Similar to [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용

R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법ultrasuperrok
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 
Data structure review (summer study)
Data structure review (summer study)Data structure review (summer study)
Data structure review (summer study)Melon Lemon
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study경 송
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율S.O.P.T - Shout Our Passion Together
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - QueueBill Kim
 
C++ Advanced 강의 4주차
 C++ Advanced 강의 4주차 C++ Advanced 강의 4주차
C++ Advanced 강의 4주차HyunJoon Park
 
HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3suitzero
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산S.O.P.T - Shout Our Passion Together
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - DequeueBill Kim
 
데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayListJaewook Byun
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기Yong Joon Moon
 

Similar to [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 (20)

5. queue
5. queue5. queue
5. queue
 
강의자료5
강의자료5강의자료5
강의자료5
 
강의자료4
강의자료4강의자료4
강의자료4
 
강의자료3
강의자료3강의자료3
강의자료3
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
 
4. stack
4. stack4. stack
4. stack
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
Data structure review (summer study)
Data structure review (summer study)Data structure review (summer study)
Data structure review (summer study)
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
 
C++ Advanced 강의 4주차
 C++ Advanced 강의 4주차 C++ Advanced 강의 4주차
C++ Advanced 강의 4주차
 
STL.doc
STL.docSTL.doc
STL.doc
 
HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3
 
자료구조02
자료구조02자료구조02
자료구조02
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue
 
데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기
 

More from Sehyeon Nam

Game programing gems 4.17
Game programing gems 4.17Game programing gems 4.17
Game programing gems 4.17Sehyeon Nam
 
Game programing gems 4.11
Game programing gems 4.11Game programing gems 4.11
Game programing gems 4.11Sehyeon Nam
 
Game programing gems 1.11
Game programing gems 1.11Game programing gems 1.11
Game programing gems 1.11Sehyeon Nam
 
Game programing gems 1.10
Game programing gems 1.10Game programing gems 1.10
Game programing gems 1.10Sehyeon Nam
 
Game programing gems 3.4 3.6
Game programing gems 3.4 3.6Game programing gems 3.4 3.6
Game programing gems 3.4 3.6Sehyeon Nam
 
Hexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong YuHexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong YuSehyeon Nam
 
아르카스톤 기획
아르카스톤 기획아르카스톤 기획
아르카스톤 기획Sehyeon Nam
 
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 [GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 Sehyeon Nam
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티Sehyeon Nam
 
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산 [GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산 Sehyeon Nam
 
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법Sehyeon Nam
 
[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법Sehyeon Nam
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summarySehyeon Nam
 
Ec++ c 1,2 surmary
Ec++ c 1,2 surmaryEc++ c 1,2 surmary
Ec++ c 1,2 surmarySehyeon Nam
 

More from Sehyeon Nam (15)

Game programing gems 4.17
Game programing gems 4.17Game programing gems 4.17
Game programing gems 4.17
 
Game programing gems 4.11
Game programing gems 4.11Game programing gems 4.11
Game programing gems 4.11
 
Game programing gems 1.11
Game programing gems 1.11Game programing gems 1.11
Game programing gems 1.11
 
Game programing gems 1.10
Game programing gems 1.10Game programing gems 1.10
Game programing gems 1.10
 
Game programing gems 3.4 3.6
Game programing gems 3.4 3.6Game programing gems 3.4 3.6
Game programing gems 3.4 3.6
 
Hexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong YuHexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong Yu
 
아르카스톤 기획
아르카스톤 기획아르카스톤 기획
아르카스톤 기획
 
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 [GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
 
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산 [GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
 
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
 
[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
Ec++ c 1,2 surmary
Ec++ c 1,2 surmaryEc++ c 1,2 surmary
Ec++ c 1,2 surmary
 
D2 ppt
D2 pptD2 ppt
D2 ppt
 

Recently uploaded

INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintahghwo99
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외Jay Park
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라Jay Park
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPTpcupcu20831004
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEETSoftwide Security
 
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개jsilabai
 

Recently uploaded (6)

INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
 
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
 

[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용

  • 1. 1부 프로그래밍 기법들 1.4 게임 프로그래밍에서의 STL 활용 (James Boer) Page 83 ~ 100 NHN NEXT, NEXON 라태웅
  • 2. STL(Standard Template Library)이 공식적으로 생겨난 때는 1997년 STL은 컨테이너(데이터의 모음) 클래스들의 모음 deque list queue map multimap set multiset bitset 등이 존재함 priority_qu eue stack vector 컨테이너는 시퀀스 컨테이너와 결합 컨테이너로 나뉨 시퀀스 컨테이너 원소들이 직선 순서대로 배치 결합(연관) 컨테이너 레드 블랙 트리, 균형 이진 트리 형태특정 위치에 대한 삽입이 허용되지 않음
  • 3. 반복자 컨테이너 안의 요소들에 대한 포인터와 비슷한 개념 ++ 연산자로 반복자를 컨테이너 안의 다음 요소로 옮기는 것 * 연산자로 반복자를 역참조해서 실제 데이터를 얻어오는 것 알고리즘 STL 클래스들에 대해 작동하는 알고리즘, 독립적인 함수로 존재 데이터와 알고리즘을 분리시키기 위해 컨테이너에 포함되지 않음
  • 4. 주요 개념 컨테이너의 시작 begin() 컨테이너의 끝 end() 주의! end()는 마지막 요소가 아니라 마지막 요소 다음의 유효하지 않은 위치를 가리킴 STL 컨테이너들은 정보를 참조(by ref)가 아닌 값(by val)으로 전달 크기가 큰 구조체나 클래스라면 포인터를 넘겨주도록 하는 것이 바람직 그렇지 않으면 매 번의 삽입, 접근마다 객체의 복사를 위해 생성자가 호출된다. begin() … … … … end() data data data data data none
  • 5. 벡터 동적으로 크기를 변경할 수 있는 배열 주기적으로 메모리를 재할당하고 새 배열로 데이터를 전송할 수 있는 배열 “크기가 변할 수 있는 배열”이라 함은, 필요한 양 이상의 메모리를 할당할 수 있음 벡터의 끝에 하나의 요소를 추가하는 작업은 “상각된“ 상수적 시간 공간이 꽉 찬 경우, 새 메모리를 할당하고, 기존 메모리에 있는 배열을 새 메모리로 복사하고, 기존 메모리를 해제하는 추가적인 시간과 자원이 소모 메모리를 재할당하면 반복자들이 무효화 새로운 메모리를 할당하고 기존 메모리를 해제하기 때문 메모리 재할당이 언제 일어나는지 이해해야 함
  • 6.
  • 7.
  • 8. c.reverse(10) none none none none none none none none none none
  • 9. c.push_back(3) c.begin() 3 c.end() none none none none none none none none none
  • 10. c.push_back(99) c.begin() 3 99 c.end() none none none none none none none none
  • 11. c.push_back(99) c.begin() 3 99 43 c.end() none none none none none none none
  • 12. c[0] = 12 c.begin() 12 99 43 c.end() none none none none none none none
  • 13. c[1] = 32 c.begin() 12 32 43 c.end() none none none none none none none
  • 14. c[2] = 999 c.begin() 12 32 999 c.end() none none none none none none none
  • 15. 리스트 이중 연결 리스트(Double Linked List)로 구현됨 어떠한 요소 삽입이나 삭제도 상수적인 시간으로 수행됨 연결 리스트이기 때문에 벡터나 데크처럼 특정 요소에 임의 접근은 불가능 벡터와 정확히 동일한 방식으로 사용 가능 push_front(), push_back 등
  • 16.
  • 17.
  • 18. 데크 컨테이너의 양 끝에서 요소의 삽입과 제거가 일어남 컨테이너 중간에서는 요소의 삽입이나 제거가 잦지 않을 때 사용 벡터와 마찬가지로 양 끝에서 삽입과 삭제는 상각된 상수적 시간이 걸린다 큐 자체 내부 데이터의 본성 때문에 임의 접근이 가능하지만 벡터보다 비효율적 시작점이 제일 처음 위치가 아니거나, 등등 none data none 양 끝에서 삽입과 삭제가 일어날 수 있기 때문에 위와 같은 상태일 수 있음 벡터와 달리 추가적인 메모리 할당을 결정할 수 없음
  • 19.
  • 20.
  • 21.
  • 22. 맵 Key-Value 쌍을 담는 컨테이너 해시 테이블보다는 비효율적이지만 속도의 차이는 무시할 수 있을 정도 삽입과 함께 정렬이 수행 즉, map의 데이터는 항상 정렬된 상태로 존재 Key를 통해 값을 조회하는 데 걸리는 시간은 O(log n) 균형 이진 트리 형태(혹은 레드 블랙 트리)의 구조 때문에 O(log n)의 시간이 걸린다
  • 23.
  • 24.
  • 25.
  • 26. 스택 push(), pop(), top()의 기본적인 멤버 함수를 제공 size()와 empty()로 현재 상태를 알 수 있다 스택은 기본적으로 하나의 deque로 구현 stack<int> c; // deque stack stack<int, vector<int>> c; // vector stack push_back, pop_back, back() 함수를 제공하는 어떠한 컨테이너라도 vector대신 사용 가능 pop()이나 top()을 수행할 때 항상 검사해야 함 안전성보다는 속도를 우선으로 설계 pop()과 top()을 할 때 스택에 요소가 있는지 size()나 empty()로 미리 점검해 주어야 함 큐와 우선 순위 큐도 마찬가지
  • 27. 큐 push(), pop(), front(), back()의 기본적인 멤버 함수를 제공 size()와 empty()로 현재 상태를 알 수 있다 back()이 요소가 삽입될 위치이다 큐 또한 기본적으로 deque를 사용하나 변경 가능 vector는 앞쪽에서 요소를 추가하거나 제거하면 나머지 요소들이 모두 밀리거나 당겨짐 때문에 vector는 비효율적 우선 순위 큐 큐와 동일하나 삽입과 동시에 내림차순으로 정렬 < 연산자를 기반으로 정렬 때문에 세번째 인자로 사용자 정의 비교 함수를 넣을 수 있음 포인터를 넣었을 경우 주소값을 비교하기 때문에 필수적
  • 28. 결론 STL의 장단점을 잘 이해하면 코드의 속도나 무결성을 훼손하지 않고 강력한 기 능을 최대한 활용할 수 있다 STL은 그 자체만으로 책 한 권을 쓸 수 있는 방대한 주제 이 글을 통해서 STL의 가능성과 매력만을 맛볼 수 있기를 바람
  • 29. 참고 자료 The C++ Standard Library: A Tutorial and Reference The C++ Programming Language Designing Components with the C++