STL 이란 Standard Template Library. 기본 템플릿 라이브러리 이다.
지금 배우고 있는 Visual Studio C++ 에 기본적으로 제공되는 표준 라이브러리 이다.
일반적인 자료구조와 알고리즘 으로 구성이 되어 있다. (ex. swap for if while ... )
탬플릿(Template - 형식,틀)을 사용한 일반화 프로그래밍 으로
기본적으로 사용되는 표준 헤더(.h)들이 모여있는것으로 수많은 자료 구조들이 들어있다.
특징!
1. C++은 표준 라이브러리를 가지고 있다.
2. 이것을 이용해 직접 특정 기능을 처음부터 직접 작성하지 않고 제공되는 함수를 통해 보다 쉽게 기능을 구현할 수 있다.
3. C++표준 라이브러리에 STL이 추가 된 것은 1994년 7월이다.
4. 템플릿은 하나의 코드로 여러 결과를 보여준다.
5. STL의 모든 코드는 템플릿으로 되어 있다.
6. STL은 기본 개념은 이미 구현 되어있는 공통적은 기능을 손쉽게 사용 가능한 것 이다.
Standard Template Library에서 라이브러리(Library)란? (도서관의뜻은 아니지만 도서관처럼 자료가 모여있는느낌?)
소프트웨어의 구성요소 중 한가지로, API*를 바탕으로 대상 환경(플랫폼)에서 바로 실행될 수 있도록 모듈화된 프로그램 모음이다. 라이브러리는 혼자서 동작하는 완전한 프로그램이 아닌, 특정한 부분 기능만을 수행하도록 제작된, 컴파일되어 기계어의 형태로 (또는 대상 플랫폼에 따라서는 바이트코드로) 존재하는 프로그램이다.
API* - Application Programming Interface (정확히 몰라서 기입해둠)
응용 프로그램 프로그래밍 인터페이스. 프로그래밍에서, 프로그램을 작성하기 위한 일련의 부(Sub) 프로그램, 프로토콜 등을 정의하여 상호 작용을 하기 위한 인터페이스 사양을 말한다.
STL의 구성 요소 [ 1.컨테이너 / 2.반복자 / 3.알고리즘 / 4.함수자 ]
[1] - (1/2) 순차 컨테이너 [ 동일한 객체가 *선형으로 구성된 집합이다. 실행 시에 동적으로 크기를 변경 가능하다. ] *선형 - 선처럼 길게 나아가는 형태와 같은 것. ------------------------------------------(이런거) 순차적 선형적 비슷한느낌? |
|
벡터(vector) | 구성 요소에 임의로 접근가능. 집합의 끝부분(마지막부분)에 삽입 및 삭제가 빠르게 처리되나 끝부분이아닌 중간부분의 삽입 및 삭제는 요소들의 개수에 따라 처리 속도가 증가하게 된다. (오늘 수업에서 배운 벡터로 좀더 이해하기 쉽다) |
데크(deque) | 구성 요소에 임의로 접근가능. 집합의 양끝(시작부분,끝부분)에 발생하는 삽입 및 삭제가 빠르게 처리되나 중간부분의 삽입 및 삭제는 해당위치에서 양끝까지의 개수에 따라 처리 속도가 증가한다. (벡터는 한쪽끝에서 삽입및 삭제이지만 데크는 양쪽끝이다. 비슷하게 끝부분이지만 벡터와 유사 주의) |
리스트(list) | 구성 요소에 선형적으로 접근가능. 집합 내의 요소 어느곳이든 삽입과 삭제가 같은 처리 속도에 접근이 가능하다. (빠르지는 않은건가?) |
[1] - (2/2) 정렬 연관 컨테이너 [ 키(key)를 이용하여 데이터를 신속하게 찾아낸다. 실행 시 동적으로 변경이 가능하다. ] |
|
셋(set) | 집합에는 오로지 키(key)만 저장이 가능하다. 키는 중복이 허용되지 않는다. 때문에 원하는 키를 빠르게 찾는 것이 가능 하다. |
멀티셋(multiset) | 셋 집합과는 다르게 멀티가 붙어있으므로 1개가아닌 여러개(2개이상)의 복사본을 가진다. |
맵(map) | 집합에 키와 데이터를 같이 관리하며 셋처럼 키는 중복이 허용X 이기때문에 객체를 빠르게 찾기 가능 |
멀티맵(multimap) | 멀티이므로 키의 중복이 허용되며 여러개(2개이상)의 복사본을 가진다. |
● ● ●
[2] - 반복자 [ 컨테이너의 요소를 가리키는 객체, 컨테이너의 시작/끝을 이동하며 요소를 읽거나 쓸 때 사용된다. ] |
|
입력(input) |
입력 반복자는 읽기 전용이다. |
출력(output) |
출력 반복자는 쓰기 전용이다. |
순방향(forward) |
한쪽 방향으로 순회 (입력, 출력 반복자 기능 모두 포함) |
양방향(bidrectional) |
양쪽 방향으로 순회 (순방향 기능 모두 포함 된다) |
임의접근 (random access) |
컨테이너의 모든 요소에 접근이 가능하며 접근소요시간이 동일 하다(양방향 기능 모두 포함) |
● ● ●
[3] - 알고리즘 [ 검색, 정렬, 수정 등의 역활을 수행하며 반복자로 지정되는 작업을 정의 해놓은 함수의 템플릿 이다. ] |
1. 변경 불가 순차(시퀸스) 알고리즘 (참조 . https://gamdekong.tistory.com/77 ) |
2. 변경 가능 순차(시퀸스) 알고리즘 (참조 . https://gamdekong.tistory.com/78 ) |
3. 정렬 관련 알고리즘 (참조 . https://gamdekong.tistory.com/79 ) |
4. 범용 수치 알고리즘 (참조 . https://gamdekong.tistory.com/80 ) |
위의 참조사이트에는 STL에 관련된 카테고리에서 상세한 내용과 예시들을 자세히 볼 수 있다.
현재 지식 부족으로 다 파악하지 못하는 관계로 하나씩 살펴보면 좋을 것 같다.
특히 간단한 게임의 코드를 예시로 많이 사용하기 때문에 좋다.
● ● ●
[4] - 함수자 |
|
함수 객체로도 불리며, 0개 이상의 인자를 받아서 알고리즘의 기본 동작을 변형하거나 확장시켜주는 객체. | |
산술 연산, 비교연산 , 논리 연산에 대한 함수자들을 제공한다. | |
산술 연산 함수자 | [ + ] , [ - ] , [ / ] , [ * ] 사칙연산 |
비교 연산 함수자 | [ == ] , [ != ] , [ > ] , [ < ] , [ >= ] , [ <= ] - 같다 같지않다 크다,작다 크거나같다 작거나같다 |
논리 연산 함수자 | [ && ] , [ || ] , [ ! ] - 그리고(AND) 또는(OR) 아니다(NOT) |
STL의 장점과 단점
장점
1. 일반화를 지원하며 하나의 단일 알고리즘으로 여러개의 컨테이너에대해 동일한 작업이 가능하다.
2. 컴파일 타임의 매커니즘을 지원하므로 실행 시 효율의 저하가 거의 없다.
3. 객체 지향적이지 않다. 함수는 모두 전역 변수를 사용하고, 상속을 거의 하지 않는다.
4. 성능이 중요하므로 가상 함수와 같은 저성능 매커니즘을 사용하지 않는다.
5. 표준이므로 *이식성이 좋다. (이식성 : 원시 프로그램을 다른 기종으로 옮기는 것이 얼마나 용이한가를 나타내는 정도.)
6. 소스 공개로 *확장성이 좋다. (확장성 : 필요한 기능을 덧붙이기쉽고 그로인해 기능을 향상 시키는 것.)
단점
1. 템플릿(Template)의 기반으로 함수와 클래스가 매번 구체화되어 소스가 커진다.
2. 가독성이 떨어진다.
3. 예외 처리가 어렵다.
'공부' 카테고리의 다른 글
복습 - 행렬 회전 과제 (0) | 2022.11.09 |
---|---|
[C++] 벡터(vector)와 벡터의 멤버함수 에 대하여 (0) | 2022.11.08 |
복습2 - 연산자 (0) | 2022.11.08 |
복습1 - 정수와 실수 (0) | 2022.11.08 |
C++ Switch 의 특징 추가 (0) | 2022.11.02 |
댓글