STL: Standard Template Library
4가지로 분류가 된다.
containers
Functions
Iterator
Algorithms
Sequence containers
Container adapters
Associative containers
Sequence containers : Array
어레이는 길이가 고정되어 있다.
C와는 다르게 자신의 길이를 알고 있다. C에서는 함수에 배열을 인자로 받게 될 때, 배열의 길이도 인자로 줬어야 했다. 하지만 C++은 그렇지 않다.
버퍼 오버플로우 : 배열 길이는 3인데 인덱스 3이나 4를 원할 때, 메모리 접근 오류
STL의 Array를 사용하면 안전하게 사용할 수 있다.
Sequence containers : Vector
어레이는 길이가 고정되어 있지만 벡터는 고정되어 있지 않다. 확장이 가능하다. 넣는 만큼 늘어나는 특성
메모리를 연속적으로 잡아서 어레이와 유사하다. 덕분에 Random Access가 가능하다. 내가 원하는 인덱스 값에 접근할 수 있다.
확장이 가능하고 메모리는 순차적으로 저장되고 있을 때, 만일 확장해야할 때 그 메모리가 어디선가 할당되어 쓰이고 있다면 어떡하나?
충분한 메모리 공간을 찾아 이사를 간다.
연속된 메모리공간 중에 나의 카파시티보다 큰 공간을 찾아 예약하고, 복사하고, 원본을 지워 메모리 이사를 마친다.
자동으로 메모리 공간이 늘어나게 되고 오버헤드도 발생하게 된다.
Sequence containers : List
동작은 똑같다. 값을 여러 개 저장할 수 있고 확장도 가능하다. 하지만 리스트는 벡터와 달리 연속되지 않은 메모리 공간에다 값을 저장한다. 따라서 Random Access를 할 수 없다. 쭉 순회하면서 찾아야 한다. Operator []를 사용할 수 없다.
더블 링크드 리스트로 구현되어 있다.
Sequence containers : Deque
어레이랑 리스트를 같이 쓴 느낌의 중간적인 컨테이너.
Double Ended Queue
값을 여러 개 만들고, 메모리가 더 필요하면 확장도 가능하다. 메모리 공간을 연속적인 메모리 공간을 잡는 게 아니라 청크라는 메모리 공간을 사용한다. 일부 메모리는 연속적으로 붙어 있고, 메모리 청크끼리는 더블 링크드 리스트로 연결되어 있다.
벡터처럼 오버헤드가 발생. 리스트처럼 값을 뒤에서 앞에서 넣을 수 있는 기능이 있다.
잘 선택해서 사용하기.
Stack And Queue
Functor
여러 가지 의미를 갖고 있다.(언어에 따라서 다르다!) OCAML에서는 Functor는 입력으로 module이 들어가고 출력이 module이 나오는 module이다. C++에서는 다르다! -> Functor의 해석이 다르다는 것만 알아두자.
Functor는 오퍼레이터를 재정의한 것. 객체인데 함수처럼 사용할 수 있는 것이다.
Function Pointer 는 무엇인가. 간단하게 함수의 주소이다! (C에서 배웠을 것이다.) 다른 함수의 인자로 함수를 넘긴다. C에서도 C++에서도 Java에서도 안 된다. 함수형 언어에서는 가능하다.(OCAML같은 거)
C에서는 함수의 포인터를 이용해서 함수에 함수를 인자로 넣는 것처럼 할 수 있다. Functor는 마치 함수 인자로 함수로 넣는 것처럼 보일 수 있다!
A x; // A
Function pointer로 함수에 인자를 넣을 때, 컴파일할 때 확인을 안 해준다.
Functor는 이미 정해져있는 게 많기 때문에 컴파일에서 체크할 수 있게 된다. 함수처럼 쓰지만 객체니까 Functor는 함수의 상태를 바꿀 수 있다.
Set And Map - 여기서 Functor를 요구해서 설명한 것이다.
컴퓨터는 순서가 있어야만 한다. 원소 간의 순서는 분명히 있다. 이걸 Functor가 순서를 매기게 된다.
'[Computer Science] -보호글 > [객체지향설계]' 카테고리의 다른 글
[객체지향설계] 11/21 이론 (0) | 2023.11.21 |
---|---|
[객체지향설계] 11/14 이론 (0) | 2023.11.14 |
[객체지향설계] 10/31 이론 -Design Pattern (0) | 2023.10.31 |
[객체지향설계] 10/03 이론 (0) | 2023.10.23 |
[객체지향설계] 10/17 이론 (1) | 2023.10.17 |