39
STL 사사사사 사사 사사 C++ ADVANCED 사사사

[C++adv] STL 사용법과 주의 사항

Embed Size (px)

Citation preview

Page 1: [C++adv] STL 사용법과 주의 사항

STL 사용법과 주의 사항C++ ADVANCED

박민근

Page 2: [C++adv] STL 사용법과 주의 사항

Generic Programming

Page 3: [C++adv] STL 사용법과 주의 사항

Template

C++ 에서 Generic Programming 을 만드는 기법

데이터 타입에 의존하지 않는 일반화 프로그래밍

Page 4: [C++adv] STL 사용법과 주의 사항

Template 예제

Page 5: [C++adv] STL 사용법과 주의 사항
Page 6: [C++adv] STL 사용법과 주의 사항

중복된 코드는 문제를 야기 한다 .

오버 로딩이 해결 방법이 아니다 .

Double? UINT? Long?? 이 추가 되면 ?

Page 7: [C++adv] STL 사용법과 주의 사항

Template 예제

Page 8: [C++adv] STL 사용법과 주의 사항

STL(Standard Template Library)

자주 쓰는 자료 구조와 알고리즘을

템플릿을 이용하여 ,

구현해놓은 C++ 의 표준 라이브러리

Page 9: [C++adv] STL 사용법과 주의 사항

자료구조( 컨테이너 )

VectorListMapSet

Deque…

알고리즘SortFind…

STL

Page 10: [C++adv] STL 사용법과 주의 사항

STL List

일반적인 이중 연결 리스트 (Double Linked List)

Page 11: [C++adv] STL 사용법과 주의 사항

STL List

특징

1.고정 길이인 배열에 비해 길이가 가변적이다 .

2.중간에 데이터 삽입 , 삭제가 용이하다 .

사용하는 경우 1. 저장할 데이터 개수가 가변적이다 .

2. 중간에 데이터 삽입 삭제가 자주 일어난다 .

Page 12: [C++adv] STL 사용법과 주의 사항

STL List - 문제점

1. 객체는 삭제되지 않는다 . (STL 컨테이너 공통 )

2. 캐릭터에 ID 가 있는 이유가 무엇인가 ?

Page 13: [C++adv] STL 사용법과 주의 사항

STL List – 주의할 점

1.순차적인 접근에서 ? 2.리스트에 해당 데이터가 존재하는지 어떻게 확인할까 ?

Page 14: [C++adv] STL 사용법과 주의 사항

STL List 주의점

1. 검색을 자주 하는 데이터에 맞지 않다 . (=>

map)

2. 인덱스를 이용해서 데이터를 랜덤하게 접근하는

경우에는 느리다 (=> vector)

Page 15: [C++adv] STL 사용법과 주의 사항

STL Vector

STL 에서 제공 하는 가변 배열

특징 1.저장할 데이터 개수가 가변적이다 .

2.임의의 데이터에 바로 접근할 수 있다 .

3.중간에 삽입 / 삭제가 용이하지 않다 . ( 느리다 )

Page 16: [C++adv] STL 사용법과 주의 사항

STL Vector – 삽입 / 삭제

Page 17: [C++adv] STL 사용법과 주의 사항

STL Vector

유용한 경우 1.저장할 데이터 개수가 가변적이다 .

2.중간에 데이터 삽입 / 삭제가 없다 .

3.저장할 데이터 개수가 적거나 , 검색이 잦지 않다 .

4.데이터 접근을 랜덤하게 하고 싶다 . ( 인덱스 )

Page 18: [C++adv] STL 사용법과 주의 사항

Vector vs List

Page 19: [C++adv] STL 사용법과 주의 사항

STL Vector – 주의할 점

Page 20: [C++adv] STL 사용법과 주의 사항

STL Vector – Capacity

Capacity

벡터가 담을 수 있는 용량 . Capacity 를 넘어 간다면 ??

Page 21: [C++adv] STL 사용법과 주의 사항

STL Vector – Capacity

1

2

3

4

Capacity : 4

5

1

2

3

4

Capacity : 8

새로운 공간을 할당한다

새로운 공간에 값을 복사한다

Page 22: [C++adv] STL 사용법과 주의 사항

STL Vector – reserve

미리 공간을 할당한다

-> 재할당이 일어나지 않는다

Page 23: [C++adv] STL 사용법과 주의 사항

STL Vector – resize

Page 24: [C++adv] STL 사용법과 주의 사항

STL vector 주의점

1. 중간에 데이터의 삽입 / 삭제가 잦은 경우에는 맞지 않다 . (=> list)

2. 처음에 데이터를 세팅할 때 reserve() 를 활용한다 .

Page 25: [C++adv] STL 사용법과 주의 사항

STL map

<Key, Value> 연관 컨테이너

Red – Black 트리 구조 ( 균형 이진 트리 )정렬된 트리 구조

map<Key, Value> 변수이름

Page 26: [C++adv] STL 사용법과 주의 사항

STL map

유용한 경우 1.많은 자료에서 키값을 통한 빠른 검색이 주요 목적이다 .

2.정렬해야 한다 .

3.빈번하게 삽입 / 삭제하지 않는다 .

Q. Map 과 List 에서 무엇이 삭제가 더 빠를까 ?

Page 27: [C++adv] STL 사용법과 주의 사항

STL map 의 사용법

Page 28: [C++adv] STL 사용법과 주의 사항

STL map 의 주의 사항

이 순간 새 원소가 생성 된다 !!잘못된 접근 !

Page 29: [C++adv] STL 사용법과 주의 사항

STL Deque

Double Ended Queue

순차적으로 처리하는 데이터에 활용 한다

Ex. 메시지 큐 , 패킷 처리 , Task 처리등…

Page 30: [C++adv] STL 사용법과 주의 사항

STL Deque

특징 1.크기가 가변적이다 .

2.앞과 뒤에서 삽입과 삭제가 좋다 .

3.중간에 데이터 삽입 / 삭제가 용이하지 않다 .

4.랜덤 접근이 가능하다 .

5.검색이 용이하지 않다 .

Page 31: [C++adv] STL 사용법과 주의 사항

STL Deque vs Vector

Page 32: [C++adv] STL 사용법과 주의 사항

STL Set

특징 1.키값만 있는 컨테이너

2.중복된 키값이 들어갈 수 없다 .

3.키값이 존재하는지 검색할 때 사용 한다 .

4.정렬해야 할 때 .

5.많은 자료를 저장하고 , 검색 속도가 빨라야 할 때

Page 33: [C++adv] STL 사용법과 주의 사항

STL Set 사용예

Page 34: [C++adv] STL 사용법과 주의 사항

STL 과 포인터

STL 의 원소는 값을 복사한다 !!

몇 개의 객체가 생성될까 ?

Page 35: [C++adv] STL 사용법과 주의 사항

STL 과 포인터

Page 36: [C++adv] STL 사용법과 주의 사항

STL 과 Iterator

Page 37: [C++adv] STL 사용법과 주의 사항

STL 과 Iterator

Page 38: [C++adv] STL 사용법과 주의 사항

참고 자료• Think About STL ( 최흥배 / 한빛미디어 )

Page 39: [C++adv] STL 사용법과 주의 사항

과제C++11 에 추가된 lamda 함수에 대해서 공부하여 ,

Lamda 로 functor 를 구현하여 아래 요구사항을 구현하여라