SlideShare a Scribd company logo
STL
들어가며… 
 컨테이너 : 자료를 담는 그릇 
 반복자 : 자료에 접근하는 포인터 
 algorithm : 컨테이너를 손쉽게 다루는 함수들을 제공 
 시퀸스 컨테이너 < vector, list, deque> / 자료 수가 적을 때 
 연관 컨테이너 <map류> / 자료 수가 많을 때 
(multi map 혹은 multi set은 key 값이 중복될 수 있는 것)
#include <list> 
 자료 구조 : 이중 링크드 리스트 
 순차적으로만 접근 해야 함 
 m_ShipList[i] 지원 안됨 (m_ShipList.at(i) 지원x) 
 Iterpos + 5; 지원 안됨 
 순차적으로만 접근 해야함 
 그럼 뭐가 이득? 
 reserve(n); 할 필요가 없음. 배열형식이 아니기 때문 
 m_ShipList.pushfront(m_Aircraft); 할 수 있음 (popfront(m_Aircraft);) 
 정렬 시 빠르다. 
 쓰기에 특화
#include<vector> 
 자료구조 : 배열 (하지만, 중간에 삭제하면 뒤에 있던 자료가 앞으로 댕겨짐) 
 랜덤접근 가능. 
 m_ShipList[i] , m_ShipList.at(i) 가능 
 Iterpos + 5 ; 가능 
 reserve(n); 해줘야 복사 방지 
 읽기에 특화
#include<deque> 
 자료구조: 이중 큐 
 양쪽에서 가므로 FIFO, LIFO 다 됨 
 <list>처럼 push_front, push_back 다 된다. 
 그럼 List와 다른점은? 
 <Vector>처럼 랜덤 접근이 가능하다 
 앞에서 넣고 빼기에 가장 효율적이라고 함.
#include <map> 
 자료구조 : Tree 
 기본적으로 key값으로 무언가를 탐색할 때 쓰면 유용하다. 
 삽입 삭제가 적을 경우 사용한다.
#include<set> 
 자료구조 : Tree 
 Map과 달리 key만 저장한다 
 key가 있는지 없는지 알아야 할 때 사용한다. (ex) 주민등록번호 
 key를 수정할 수 있지만 수정한 경우 수정 값으로 정렬 되지 않는다.
#include<Algorithm> 
 크게 읽기/ 변경 / 수치 / 정렬이 있음 
 읽기 
 find / find_if / find_end/ find_end/ search 
=>찾을려고하는 데이터의 반복자를 return 
 for_each => for문을 돌면서 함수를 호출 (for문 도는것과 같은 효과) 
 count => 조건을 만족하는 데이터의 개수를 return
#include<Algorithm> 
 find , find_if : 찾고자 하는 데이터의 iterator를 반환 (문자열을 찾는데 특화되어있음) 
 Find 
 Find_if : bool 함수를 이용하여 데이터를 찾음. 문자열의 부분 부분을 비교하는데 용이
#include<Algorithm> 
 Search , find_end : 전의 find가 한 문자(string의 경우), 를 찾아 반복자를 리턴 
했다면 search하고 find_end는 구간의 일치하는 것을 찾음 
 Search는 앞에서 부터 탐색 
 find_end는 뒤에서 부터 탐색 ( Search_end라고하면 더 make sense했을듯)
#include<Algorithm> 
 쓰기 
 Copy, copy backward 
 Generate 
 Random_shuffle 
 Remove
#include<Algorithm> 
 Copy 
 Assign 하고는 무엇이 다르지? 
 Assign은 특정 값으로 채우는 것이고, copy는 어느 부분부터 어느부분까지를 복사
#include<Algorithm> 
 Generate 함수를 사용하여 생성 
 For문을 돌면서 makeShip()을 하는 것과 같음
#include<Algorithm> 
 Random_Shuffle 컨테이너의 원소의 순서를 섞음 
 Vector를 쓸 경우 반복자를 이용해 그냥 랜덤 접근하는 것이 더 편할 것 같음
#include<Algorithm> 
 Remove: 컨테이너를 삭제하는 시늉을 함 
실제로 삭제한 것이 아니니 컨테이너의 크기는 변하지 않음 
(실제 삭제는 erase를 호출 해줘야 함)
#include<Algorithm> 
 정렬 – Sort / binary_Search / merge 
 Sort 
-stl 기본형이라면 greate나 less를 이용한다. 
-string도 비교 가능 (알파벳 순으로) 
-비교 함수를 만들어 정렬 가능하다.
#include<Algorithm> 
 binary search 
-이미 정렬 되어 있는 것에서 특정 데이터를 확인하는 알고리즘 
 merge 
-두 개의 정렬된 구간을 합칠 때 사용
#include<Algorithm> 
 수치 – accumulate / inner_product 
 accumulate 
-지정 구간 속한 값을 더한다. 
-#include <numeric> 필요
#include<Algorithm> 
 inner_porduct 
두 입력 시퀀스를 내적 하는 알고리즘 
//즉 각 시퀀스의 위치마다 곱하고 이를 다 더한다. 
//두 번째 입력 시퀀스는 첫 번째보다 크거나 같아야 한다.

More Related Content

What's hot

05_STL컨테이너정리
05_STL컨테이너정리05_STL컨테이너정리
05_STL컨테이너정리
noerror
 
자료구조6보고서
자료구조6보고서자료구조6보고서
자료구조6보고서
KimChangHoen
 
Project#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 HwpProject#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 Hwp
Kimjeongmoo
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항
MinGeun Park
 

What's hot (20)

[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
05_STL컨테이너정리
05_STL컨테이너정리05_STL컨테이너정리
05_STL컨테이너정리
 
Binary Search
Binary SearchBinary Search
Binary Search
 
Data Structures
Data StructuresData Structures
Data Structures
 
C++ VECTOR, LIST, MAP
C++ VECTOR, LIST, MAPC++ VECTOR, LIST, MAP
C++ VECTOR, LIST, MAP
 
Apply교육
Apply교육Apply교육
Apply교육
 
자료구조6보고서
자료구조6보고서자료구조6보고서
자료구조6보고서
 
Python 스터디
Python 스터디Python 스터디
Python 스터디
 
Project#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 HwpProject#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 Hwp
 
Data structure review (summer study)
Data structure review (summer study)Data structure review (summer study)
Data structure review (summer study)
 
Stl 컨테이너
Stl 컨테이너Stl 컨테이너
Stl 컨테이너
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
C++ stl
C++ stlC++ stl
C++ stl
 
1. alps c&c++
1. alps c&c++1. alps c&c++
1. alps c&c++
 
Hash table
Hash tableHash table
Hash table
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
Javascript - Array
Javascript - ArrayJavascript - Array
Javascript - Array
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항
 
Std bind
Std bindStd bind
Std bind
 
Scala스터디 - 배열사용하기
Scala스터디 - 배열사용하기Scala스터디 - 배열사용하기
Scala스터디 - 배열사용하기
 

Similar to [Commit Again] 1주차 STL study

이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
quxn6
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
Kimjeongmoo
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
Cosmos Shin
 

Similar to [Commit Again] 1주차 STL study (20)

자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
Collection framework
Collection frameworkCollection framework
Collection framework
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
 
Haskell study 5
Haskell study 5Haskell study 5
Haskell study 5
 
Scala 기초 (4)
Scala 기초 (4)Scala 기초 (4)
Scala 기초 (4)
 
Java(4/4)
Java(4/4)Java(4/4)
Java(4/4)
 
Light Tutorial Python
Light Tutorial PythonLight Tutorial Python
Light Tutorial Python
 
STL study (skyLab)
STL study (skyLab)STL study (skyLab)
STL study (skyLab)
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Effective STL 1~4장 정리
Effective STL 1~4장 정리Effective STL 1~4장 정리
Effective STL 1~4장 정리
 
모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 generic
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
Scala
ScalaScala
Scala
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
 
Java_08 collection
Java_08 collectionJava_08 collection
Java_08 collection
 

[Commit Again] 1주차 STL study

  • 1. STL
  • 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했을듯)
  • 11. #include<Algorithm>  쓰기  Copy, copy backward  Generate  Random_shuffle  Remove
  • 12. #include<Algorithm>  Copy  Assign 하고는 무엇이 다르지?  Assign은 특정 값으로 채우는 것이고, copy는 어느 부분부터 어느부분까지를 복사
  • 13. #include<Algorithm>  Generate 함수를 사용하여 생성  For문을 돌면서 makeShip()을 하는 것과 같음
  • 14. #include<Algorithm>  Random_Shuffle 컨테이너의 원소의 순서를 섞음  Vector를 쓸 경우 반복자를 이용해 그냥 랜덤 접근하는 것이 더 편할 것 같음
  • 15. #include<Algorithm>  Remove: 컨테이너를 삭제하는 시늉을 함 실제로 삭제한 것이 아니니 컨테이너의 크기는 변하지 않음 (실제 삭제는 erase를 호출 해줘야 함)
  • 16. #include<Algorithm>  정렬 – Sort / binary_Search / merge  Sort -stl 기본형이라면 greate나 less를 이용한다. -string도 비교 가능 (알파벳 순으로) -비교 함수를 만들어 정렬 가능하다.
  • 17. #include<Algorithm>  binary search -이미 정렬 되어 있는 것에서 특정 데이터를 확인하는 알고리즘  merge -두 개의 정렬된 구간을 합칠 때 사용
  • 18. #include<Algorithm>  수치 – accumulate / inner_product  accumulate -지정 구간 속한 값을 더한다. -#include <numeric> 필요
  • 19. #include<Algorithm>  inner_porduct 두 입력 시퀀스를 내적 하는 알고리즘 //즉 각 시퀀스의 위치마다 곱하고 이를 다 더한다. //두 번째 입력 시퀀스는 첫 번째보다 크거나 같아야 한다.