2. 들어가며…
컨테이너 : 자료를 담는 그릇
반복자 : 자료에 접근하는 포인터
algorithm : 컨테이너를 손쉽게 다루는 함수들을 제공
시퀸스 컨테이너 < vector, list, deque> / 자료 수가 적을 때
연관 컨테이너 <map류> / 자료 수가 많을 때
(multi map 혹은 multi set은 key 값이 중복될 수 있는 것)
3. #include <list>
자료 구조 : 이중 링크드 리스트
순차적으로만 접근 해야 함
m_ShipList[i] 지원 안됨 (m_ShipList.at(i) 지원x)
Iterpos + 5; 지원 안됨
순차적으로만 접근 해야함
그럼 뭐가 이득?
reserve(n); 할 필요가 없음. 배열형식이 아니기 때문
m_ShipList.pushfront(m_Aircraft); 할 수 있음 (popfront(m_Aircraft);)
정렬 시 빠르다.
쓰기에 특화
4. #include<vector>
자료구조 : 배열 (하지만, 중간에 삭제하면 뒤에 있던 자료가 앞으로 댕겨짐)
랜덤접근 가능.
m_ShipList[i] , m_ShipList.at(i) 가능
Iterpos + 5 ; 가능
reserve(n); 해줘야 복사 방지
읽기에 특화
5. #include<deque>
자료구조: 이중 큐
양쪽에서 가므로 FIFO, LIFO 다 됨
<list>처럼 push_front, push_back 다 된다.
그럼 List와 다른점은?
<Vector>처럼 랜덤 접근이 가능하다
앞에서 넣고 빼기에 가장 효율적이라고 함.
6. #include <map>
자료구조 : Tree
기본적으로 key값으로 무언가를 탐색할 때 쓰면 유용하다.
삽입 삭제가 적을 경우 사용한다.
7. #include<set>
자료구조 : Tree
Map과 달리 key만 저장한다
key가 있는지 없는지 알아야 할 때 사용한다. (ex) 주민등록번호
key를 수정할 수 있지만 수정한 경우 수정 값으로 정렬 되지 않는다.
8. #include<Algorithm>
크게 읽기/ 변경 / 수치 / 정렬이 있음
읽기
find / find_if / find_end/ find_end/ search
=>찾을려고하는 데이터의 반복자를 return
for_each => for문을 돌면서 함수를 호출 (for문 도는것과 같은 효과)
count => 조건을 만족하는 데이터의 개수를 return
9. #include<Algorithm>
find , find_if : 찾고자 하는 데이터의 iterator를 반환 (문자열을 찾는데 특화되어있음)
Find
Find_if : bool 함수를 이용하여 데이터를 찾음. 문자열의 부분 부분을 비교하는데 용이
10. #include<Algorithm>
Search , find_end : 전의 find가 한 문자(string의 경우), 를 찾아 반복자를 리턴
했다면 search하고 find_end는 구간의 일치하는 것을 찾음
Search는 앞에서 부터 탐색
find_end는 뒤에서 부터 탐색 ( Search_end라고하면 더 make sense했을듯)