[c++adv] stl 사용법과 주의 사항

Post on 20-Jun-2015

2.595 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

박민근

Generic Programming

Template

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

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

Template 예제

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

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

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

Template 예제

STL(Standard Template Library)

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

템플릿을 이용하여 ,

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

자료구조( 컨테이너 )

VectorListMapSet

Deque…

알고리즘SortFind…

STL

STL List

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

STL List

특징

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

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

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

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

STL List - 문제점

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

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

STL List – 주의할 점

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

STL List 주의점

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

map)

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

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

STL Vector

STL 에서 제공 하는 가변 배열

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

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

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

STL Vector – 삽입 / 삭제

STL Vector

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

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

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

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

Vector vs List

STL Vector – 주의할 점

STL Vector – Capacity

Capacity

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

STL Vector – Capacity

1

2

3

4

Capacity : 4

5

1

2

3

4

Capacity : 8

새로운 공간을 할당한다

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

STL Vector – reserve

미리 공간을 할당한다

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

STL Vector – resize

STL vector 주의점

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

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

STL map

<Key, Value> 연관 컨테이너

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

map<Key, Value> 변수이름

STL map

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

2.정렬해야 한다 .

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

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

STL map 의 사용법

STL map 의 주의 사항

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

STL Deque

Double Ended Queue

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

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

STL Deque

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

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

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

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

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

STL Deque vs Vector

STL Set

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

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

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

4.정렬해야 할 때 .

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

STL Set 사용예

STL 과 포인터

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

몇 개의 객체가 생성될까 ?

STL 과 포인터

STL 과 Iterator

STL 과 Iterator

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

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

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

top related