[c++adv] stl 사용법과 주의 사항
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 를 구현하여 아래 요구사항을 구현하여라