컨테이너(container)
std::string
using string = basic_string<char, char_traits, allocator>;
문자열 - 문자열 가진 배열
STL = 문자를 우너소로 가지는 특수화된 컨테이너
<string>
stoi
to_string
<sstresm>
std::ostringstream
컨테이너 예제
벡터(vector)
- 일반 수학에서는 연속된 n개의 값을 벡터 => 베열과 비슷
- 원소의 타입을 특수화해서 인스턴스를 만듭니다. - 템플릿을 특수화
c++11 범위기반반복문(ranged base for loop)
- for (auto e : v) => 타입이 추측 가능해야한다는 점이 있음
컨테이너 종류
- 시퀸스 컨테이너(sequence Container)
std::array = 배열 컨테이너
std::vector = 동적 배열
std:: forward_list =single linked list
std::list =double linked list
std::deque =양방향 queue
- 보조 컨테이너(container adapter)
std::stack
std::queue
std::priority_queue
- 연관 컨테이너(associative container)
std::set =binar searching tree(single)
std::map = binar searching tree(key[색인] - value[실제값])
overhead
- 오버헤드 : 불필요한 비용 발생
- 순차 접근(sequence access) =
- 임의 접근(random access) = RAM
컨테이너 사용법
- std::array(배열)
- sequential
- contiguos(array[3]은 array +3 : 3칸 옮기는 것
- fixed
- std::vector(동적배열) : 새로만들어와서 복사
- sequential
- Dynamic : 끝에서 원소를 삭제하고 추가하는 것이 좋음
- std::forward_list : 단일 연결 리스트
- sequential
- dynamic
- 삽입/삭제 어디든 상수시간에 끝남
- 어디든 삽입 삭제해도 문제가 없음
- 앞에서 삽입 삭제가 가장 빠름
- 임의 접근이 불가능([])
- std::list
- sequential
- dynamic
- 어느 위치든 삽입/ 삭제 상수시간, 앞에서, 뒤에서 삽입/삭제가 빠름
- std::deque
- Sequential
- dynamic
- double ended queue
- 앞 뒤에서만 삽입/삭제가 이뤄짐
그래프 구조
-
꼭지점들 사이를 선으로 연결한 구조
-
트리 구조도 그래프 구조의 하위 개념
-
map과 set이 트리 구조를 사용함
- std::set <tree자료구조>
- associate (부모와의 연관성)
- ordered (자동으로 정렬이 되어 나옴)
- unique (원소는 중복된 값을 가질 수 없음)
- std::map
- 구조는 set과 같음
- ket, value로 구조 형성됨 : 사전(dictionary)
자주 사용하게되는 컨테이너
std:: vector
데이터가 적은 경우 (10000개 미만)
뒤에서만 삽입 삭제
std::list
데이터가 많은 경우(10000개 이상)
실제로 약간 느리고 무거움
어쩔수 없을 때 리스트를 쓰기
std::map
데이터가 많은 경우(10000개 이상)
유니크한 키
이터레이터(iterator)
- 컨테이너의 원소를 순회(traverse)하기 위해서 등장한 개념
- 포인터를 가진 클래스
- ++,--,!=,== 연산이 지원됨
- 시작,끝을 의미하는 begin(),end() 제공
- 알고리즘(algorithm)
복잡한 구조
- 컨테이너를 순회하기 위한 포인터 객체
- 모든 컨테이너는 이터레이터를 (가지고) 있다
- 자료구조(컨테이너) has a 이터레이터
- vector 안에 iterator선언이 존재(typedef pointer)
==
정렬, 검사,검색,복사(클로닝)
알고리즘(컨테이너와 분리) : 일반화(어떤 자료형이든 똑같이 사용하도록 분리)
람다식
STL 메뉴얼보고 따라해보기
기타
메모리관리,멀티쓰레씽,멀티프로세싱,예외처리