c23 [C++] STL (표준 템플릿 라이브러리)
본문 바로가기
[C++]

[C++] STL (표준 템플릿 라이브러리)

by Jarvis2304 2022. 11. 30.

▶ STL(Standard Template Library)

- 표준 템플릿 라이브러리

- C++ 표준 라이브러리 중 하나

- 템플릿으로 작성된 많은 제네릭 클래스와 함수 라이브러리

- 개발자 이들을 이용하여 쉽게 응용 프로그램 작성

 

▷ STL의 구성

● 컨테이너 - 템플릿 클래스

- 데이터를 저장하고 담아두는 자료구조를 표현한 클래스

ex) 리스트(list), 큐(queue), 스택(stack), 맵(map), 셋(set), 벡터(vector)등이 존재

● iterator - 컨테이너 원소에 대한 포인터

- 컨데이너의 원소들을 순회하면서 접근하기 위해 만들어진 컨테이너 원소에 대한 포인터

● 알고리즘 - 템플릿 함수

- 컨테이너 원소에 대한 복사, 검색, 삭제, 정렬 등의 기능을 구현한 템플릿 함수

- 컨테이너의 멤버 함수 아님

 

 

● 컨데이너, iterator,  알고리즘 함수들의 종류

 

 

▷ 헤더파일과 이름공간

- STL은 std 이름공간에 작성되었기 때문에, STL이용하면 using namespace std; 코드 필요

- 또한 해당 클래스가 선언된 헤더파일 선언 필요

 

ex) 

#include <vector>  -  vector 클래스를 사용하기위해 헤더파일 선언

#include <list>  - list 클래스를 사용하기위해 헤더파일 선언

#include <algorithm> - 알고리즘 함수를 사용하기위해 헤더파일 선언

 

 

 

▶ vector 컨테이너

- 가변 길이 배열을 구현한 제네릭 클래스

- 개발자가 벡터의 길이에 대한 고민할 필요 없음

- 원소의 저장, 삭제, 검색 등 다양한 멤버 함수 지원

- 벡터에 저장된 원소는 인덱스로 접근 가능(인덱스는 0부터 시작)

 

 

● vector 클래스의 주요 멤버와 연산자

 

▷ vector 다루기 사례

 

예제) vector 컨테이너 활용하기

 

예제) 문자열을 저장하는 벡터 만들기 연습 

 

▷ iterator 

- 컨테이너의 원소를 가리키는 포인터

- 반복자라고도 부름

● iterator 변수 선언

- 구체적인 컨테이너를 지정하여 반복자 변수 생성

800

 

예제)  iterator를 사용하여 vector의 모든 원소에 2 곱하기

 

 

 

 

▶ map 컨테이너

- ('키', '값')의 쌍을 원소로 저장하는 제네릭 컨테이너

- 동일한 '키'를 가진 원소가 중복 저장되면 오류 발생

- '키'로 '값' 검색

- 많은 응용에서 필요, #include <map> 헤더파일을 포함해야함

 

▷  맵 컨테이너 생성 예시

- 영한 사전을 저장하기 위한 맵 컨테이너 생성 및 활용

- 영어단어와 한글단어를 쌍으로 저장하고, 영어단어로 검색

● map 클래스의 주요 멤버와 연산자

 

예제) map으로 영한사전 만들기

 

 

 

 

▶ 알고리즘 함수

- 템플릿 함수

- 전역 함수 (STL 컨테이너 클래스의 멤버 함수가 아님)

- iterator와 함께 작동

 

● sort() 함수 사례

- 두 개의 매개변수

- 첫 번째 매개변수 :소팅을 시작한 원소의 주소

- 두 번째 매개변수 :소팅 범위의 마지막 원소 다음 주소

 

예제) sort() 함수를 이용한 vector 소팅

 

 

 

 

 

▶ auto를 이용하여 쉬운 변수 선언

- C++ 11부터 auto 선언의 의미 수정: 컴파일러에게 변수선언문에서 추론하여 타입을 자동 선언하도록 지시

- C++ 11이전까지는 스택에 할당되는 지역 변수를 선언하는 키워드

 

▷ auto의 기본 사용 사례

 

 

▷ auto의 다른 활용 사례

● 함수의 리턴 타입으로부터 추론하여 변수 타입 선언

 

● STL 템플릿에 활용

- vector<int>iterator 타입의 변수 it를 auto를 이용하여 간단히 선언

 

 

예제) auto를 이용한 변수선언

 

 

 

▶ 람다

● 람다 대수와 람다식

- 람다 대수에서 람다식은 수학 함수를 단순하게 표현하는 기법

● C++ 람다

- 익명의 함수를 만드는 기능으로 C++11에서 도입

- 람다식, 람다 함수로도 불림

- C#, Java, 파이썬, 자바스크립트 등 많은 언어들이 도입하고 있음

 

 

● C++ 람다식의 구성

- 4부분으로 구성

(1) 캡쳐 리스트: 람다식에서 사용하고자 하는 함수 바깥의 변수 목록

(2) 매개변수 리스트 :보통 함수의 매개변수 리스트와 동일

(3) 리턴 타입

(4) 함수 바디 :람다식의 함수 코드

예제) 간단한 람다식 만들기

- 매개변수 x, y의 합을 출력하는 람다식 만들기

 

 

 

 

예제) auto로 람다식 저장 및 호출 

- auto로 람다식 다루기

 

 

 

 

예제) 캡쳐 리스트와 리턴 타입을 가지는 람다식

- 반지름이 r이 원의 면적으로 리턴하는 람다식 만들기 

 

 

 

예제)  캡쳐 리스트에 참조를 활용하는 람다식

- 캡쳐 리스트에 참조 활용, 합을 외부에 저장하는 람다식 만들기

 

예제)   STL for-each() 함수를 이용하여 벡터의 모든 원소 출력

 

 

예제)  STL 템플릿에서 람다식 활용

- STL 함수 for-each()와 람다식을 이용하여 벡터의 모든 원소 출력

 

 

'[C++]' 카테고리의 다른 글

[C++] 예외처리  (0) 2022.12.10
[C++] 파일 입출력  (0) 2022.12.10
[C++] 템플릿  (0) 2022.11.23
[C++] 가상함수와 추상 클래스 (다형성)  (0) 2022.11.17
[C++] 상속  (0) 2022.11.08

댓글