본문 바로가기
공부

[C++] STL 에 대하여

by MY블로그 2022. 11. 8.
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

댓글