표준 C++ 라이브러리 (Standard Template Library)프로그램에 필요한 자료구조와 알고리즘을 Template로 제공하는 라이브러리
출처: https://blockdmask.tistory.com/67 [개발자 지망생:티스토리]
객체를 저장하는 객체, 자료구조 라고도 한다. 클래스 템플릿으로 구현되어있다.
container는 크게 sequence container, associative container로 나뉩니다.
Sequence Container 의 종류 : array (C++ 11), vector, list, deque
Associative Container 의 종류 : set, multiset, map, multimap
포인터와 비슷한 개념으로 컨테이너의 원소를 가리키고, 가리키는 원소에 접근하여 다음 원소를 가리키는 기능. 순회
정렬, 삭제, 검색, 연산 등을 해결하는 일반화된 방법을 제공하는 함수 템플릿.
함수처럼 동작하는 객체로 operator() 연산자를 오버로딩 한 객체.
컨테이너와 알고리즘 등에 클라이언트 정책을 반영한다.
구성요소의 인터페이스를 변경해 새로운 인터페이스를 갖는 구성 요소로 변경.
컨테이너의 메모리 할당 정책을 캡슐화한 클래스 객체로 모든 컨테이너는 자신만의 할당기를 가지고 있다.
표준 라이브러리에서 제공해주는 가변배열
#include vector
표준 라이브러리에서 제공해주는 연결형 리스트
#include list
이거 두개 다 당연히 "템플릿"이다.
vector에는 당연히 push_front없는데
배열에서 앞에다 넣는다?? => ㅈㄴ 비효율적
앞에다가 데이터를 넣을 것이였으면
당연히 리스트가 효율적이다.
이렇게 at이라는 함수도 존재.
그런데 이렇게 데이터를 저장하면
내가 vector라는 객체에다가 저장하는게 아니라
이녀석도 "가변배열"이라 Heap 메모리를 가르키고
그 녀석에게 데이터를 넣는다.
그때의 첫번째 주소를 (데이터 시작 주소를) 반환하는데
이 주소를 뽑아?오는 함수가 vector.data();
16번째 줄 처럼 반환이 T* 로주면 끝.
현재 기준으로 크기
vector.size();
현재 기준으로 몇칸 까지가 허용범위 인지.
vector.capacity();
함수 부분이
list.capacity 빼고 vector랑 똑같음.
당연히 capacity는 없다. => 생각.
노드로 연결 -> 연결 -> 연결 하니까.
반복자.
리스트에는 당연하게도
[ ]라는 operator(연산자)를 제공하지 않는다.
메모리가 연속작이지 않기 때문에
size_t == 8byte == __int64 == longlong
순회 하는 방법이다.
vector처럼 순회하고싶다
=> iterator를 제공한데
집어 넣은 데이터를 순회 할 수 있는 키워드.
list<int>::iterator iter;
list라는 클래스내에 클래스가 또 정의되있는 형태이다.
inner class라고한다.
listInt.begin() =>
iter라는 변수는 listInt의 첫번째 데이터를 가르키고 있다라고 생각하면된다.
지금 int iData = *iter로
뭔가 포인터를 역참조해서 그 값을 받아오는 듯한 느낌이다.
그런데 지금 list안에 들어잇는 첫번째 데이터를 iter로 받아와서
그것을 역참조해서 iData에다가 값을 넣어주는 중.
이거는 지금 포인터가 아니라,
"클래스의 객체" 이다.
그럼, '*'는 뭐냐? =>