[c++adv] stl 사용법과 주의 사항
TRANSCRIPT
![Page 1: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/1.jpg)
STL 사용법과 주의 사항C++ ADVANCED
박민근
![Page 2: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/2.jpg)
Generic Programming
![Page 3: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/3.jpg)
Template
C++ 에서 Generic Programming 을 만드는 기법
데이터 타입에 의존하지 않는 일반화 프로그래밍
![Page 4: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/4.jpg)
Template 예제
![Page 5: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/5.jpg)
![Page 6: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/6.jpg)
중복된 코드는 문제를 야기 한다 .
오버 로딩이 해결 방법이 아니다 .
Double? UINT? Long?? 이 추가 되면 ?
![Page 7: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/7.jpg)
Template 예제
![Page 8: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/8.jpg)
STL(Standard Template Library)
자주 쓰는 자료 구조와 알고리즘을
템플릿을 이용하여 ,
구현해놓은 C++ 의 표준 라이브러리
![Page 9: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/9.jpg)
자료구조( 컨테이너 )
VectorListMapSet
Deque…
알고리즘SortFind…
STL
![Page 10: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/10.jpg)
STL List
일반적인 이중 연결 리스트 (Double Linked List)
![Page 11: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/11.jpg)
STL List
특징
1.고정 길이인 배열에 비해 길이가 가변적이다 .
2.중간에 데이터 삽입 , 삭제가 용이하다 .
사용하는 경우 1. 저장할 데이터 개수가 가변적이다 .
2. 중간에 데이터 삽입 삭제가 자주 일어난다 .
![Page 12: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/12.jpg)
STL List - 문제점
1. 객체는 삭제되지 않는다 . (STL 컨테이너 공통 )
2. 캐릭터에 ID 가 있는 이유가 무엇인가 ?
![Page 13: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/13.jpg)
STL List – 주의할 점
1.순차적인 접근에서 ? 2.리스트에 해당 데이터가 존재하는지 어떻게 확인할까 ?
![Page 14: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/14.jpg)
STL List 주의점
1. 검색을 자주 하는 데이터에 맞지 않다 . (=>
map)
2. 인덱스를 이용해서 데이터를 랜덤하게 접근하는
경우에는 느리다 (=> vector)
![Page 15: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/15.jpg)
STL Vector
STL 에서 제공 하는 가변 배열
특징 1.저장할 데이터 개수가 가변적이다 .
2.임의의 데이터에 바로 접근할 수 있다 .
3.중간에 삽입 / 삭제가 용이하지 않다 . ( 느리다 )
![Page 16: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/16.jpg)
STL Vector – 삽입 / 삭제
![Page 17: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/17.jpg)
STL Vector
유용한 경우 1.저장할 데이터 개수가 가변적이다 .
2.중간에 데이터 삽입 / 삭제가 없다 .
3.저장할 데이터 개수가 적거나 , 검색이 잦지 않다 .
4.데이터 접근을 랜덤하게 하고 싶다 . ( 인덱스 )
![Page 18: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/18.jpg)
Vector vs List
![Page 19: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/19.jpg)
STL Vector – 주의할 점
![Page 20: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/20.jpg)
STL Vector – Capacity
Capacity
벡터가 담을 수 있는 용량 . Capacity 를 넘어 간다면 ??
![Page 21: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/21.jpg)
STL Vector – Capacity
1
2
3
4
Capacity : 4
5
1
2
3
4
Capacity : 8
새로운 공간을 할당한다
새로운 공간에 값을 복사한다
![Page 22: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/22.jpg)
STL Vector – reserve
미리 공간을 할당한다
-> 재할당이 일어나지 않는다
![Page 23: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/23.jpg)
STL Vector – resize
![Page 24: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/24.jpg)
STL vector 주의점
1. 중간에 데이터의 삽입 / 삭제가 잦은 경우에는 맞지 않다 . (=> list)
2. 처음에 데이터를 세팅할 때 reserve() 를 활용한다 .
![Page 25: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/25.jpg)
STL map
<Key, Value> 연관 컨테이너
Red – Black 트리 구조 ( 균형 이진 트리 )정렬된 트리 구조
map<Key, Value> 변수이름
![Page 26: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/26.jpg)
STL map
유용한 경우 1.많은 자료에서 키값을 통한 빠른 검색이 주요 목적이다 .
2.정렬해야 한다 .
3.빈번하게 삽입 / 삭제하지 않는다 .
Q. Map 과 List 에서 무엇이 삭제가 더 빠를까 ?
![Page 27: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/27.jpg)
STL map 의 사용법
![Page 28: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/28.jpg)
STL map 의 주의 사항
이 순간 새 원소가 생성 된다 !!잘못된 접근 !
![Page 29: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/29.jpg)
STL Deque
Double Ended Queue
순차적으로 처리하는 데이터에 활용 한다
Ex. 메시지 큐 , 패킷 처리 , Task 처리등…
![Page 30: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/30.jpg)
STL Deque
특징 1.크기가 가변적이다 .
2.앞과 뒤에서 삽입과 삭제가 좋다 .
3.중간에 데이터 삽입 / 삭제가 용이하지 않다 .
4.랜덤 접근이 가능하다 .
5.검색이 용이하지 않다 .
![Page 31: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/31.jpg)
STL Deque vs Vector
![Page 32: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/32.jpg)
STL Set
특징 1.키값만 있는 컨테이너
2.중복된 키값이 들어갈 수 없다 .
3.키값이 존재하는지 검색할 때 사용 한다 .
4.정렬해야 할 때 .
5.많은 자료를 저장하고 , 검색 속도가 빨라야 할 때
![Page 33: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/33.jpg)
STL Set 사용예
![Page 34: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/34.jpg)
STL 과 포인터
STL 의 원소는 값을 복사한다 !!
몇 개의 객체가 생성될까 ?
![Page 35: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/35.jpg)
STL 과 포인터
![Page 36: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/36.jpg)
STL 과 Iterator
![Page 37: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/37.jpg)
STL 과 Iterator
![Page 38: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/38.jpg)
참고 자료• Think About STL ( 최흥배 / 한빛미디어 )
![Page 39: [C++adv] STL 사용법과 주의 사항](https://reader036.vdocuments.net/reader036/viewer/2022081416/558514a2d8b42ab60a8b500c/html5/thumbnails/39.jpg)
과제C++11 에 추가된 lamda 함수에 대해서 공부하여 ,
Lamda 로 functor 를 구현하여 아래 요구사항을 구현하여라