▶ 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 변수 선언
- 구체적인 컨테이너를 지정하여 반복자 변수 생성



예제) 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 |
댓글