STL 개요 및 철학
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 104개 중 70번째.
표준 템플릿 라이브러리(Standard Template Library, STL)는 일반적인 데이터 구조와 알고리즘을 제공하는 템플릿 기반 클래스와 함수의 모음입니다. 지금까지 배운 템플릿 개념을 기반으로 구축된 STL은 강력한 설계 철학을 구현합니다. 즉, 데이터 저장과 데이터 조작을 분리하는 것입니다.
STL은 함께 작동하는 세 가지 핵심 구성 요소를 중심으로 구성됩니다.
| 구성 요소 | 목적 | 예시 |
|---|---|---|
| 컨테이너 | 객체 컬렉션 저장 | vector, map, set |
| 반복자 | container elements에 대한 액세스 제공 | Input, 출력, 임의 접근 |
| 알고리즘 | 데이터에 대한 작업 수행 | sort, find, transform |
핵심 통찰은 알고리즘이 container에 대해 직접 알지 못하며, 반복자를 통해 작동한다는 것입니다. 이는 하나의 sort 알고리즘이 벡터, 배열 및 올바른 반복자 유형을 제공하는 모든 container에서 작동한다는 의미입니다.
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> nums = {5, 2, 8, 1, 9};
std::sort(nums.begin(), nums.end());
for (int n : nums) {
std::cout << n << " ";
}
// 출력: 1 2 5 8 9
}이러한 분리를 통해 자유롭게 조합할 수 있습니다. 새로운 코드를 작성하지 않고도 호환되는 어떤 컨테이너와도 어떤 알고리즘이든 사용할 수 있습니다. STL은 충분히 검증되고 최적화된 구현을 제공하므로, 일반적인 자료 구조를 다시 발명하는 대신 문제 해결에 집중할 수 있습니다.
챌린지
쉬움컨테이너, 반복자, 알고리즘을 분리하는 STL 철학을 보여 주는 간단한 데이터 처리 시스템을 만들어 보겠습니다. STL 구성 요소와 함께 작동하는 유틸리티 모듈과 이러한 요소들이 어떻게 함께 맞물리는지 보여 주는 메인 프로그램을 작성합니다.
두 개의 파일을 작성합니다:
DataProcessor.h: 반복자를 통해 STL 컨테이너와 함께 작동하는 유틸리티 함수를 정의하여 STL의 설계 철학을 보여 줍니다.printVector라는 함수를 작성합니다. 이 함수는std::vector<int>&를 받아 모든 요소를 공백으로 구분하여 출력하고, 그 뒤에 줄바꿈을 출력합니다. 반복자(begin()및end())를 사용하여 컨테이너를 순회합니다.sortAndPrint라는 함수를 작성합니다. 이 함수는std::vector<int>&를 받아std::sort를 사용하여 정렬한 다음, 정렬된 요소를 공백으로 구분하여 출력하고 그 뒤에 줄바꿈을 출력합니다.findElement라는 함수를 작성합니다. 이 함수는std::vector<int>&와 검색할int값을 받습니다.std::find를 사용하여 요소를 찾습니다. 찾으면Found: <value>를 출력합니다. 찾지 못하면Not found: <value>를 출력합니다.getSum이라는 함수를 작성합니다. 이 함수는std::vector<int>&를 받아 모든 요소의 합을 반환합니다. 이를 위해 반복자를 사용하는 간단한 반복문을 사용할 수 있습니다.main.cpp: 입력을 읽고 STL 구성 요소가 함께 작동하는 방식을 보여 줍니다.다섯 개의 입력을 읽습니다(각 입력은 별도의 줄에 있습니다):
- 첫 번째 정수
- 두 번째 정수
- 세 번째 정수
- 네 번째 정수
- 검색할 값
std::vector<int>를 만들고 처음 네 개의 정수를 여기에 추가합니다. 그런 다음 다음과 같이 STL 철학을 보여 줍니다:Original:을 출력한 다음printVector를 호출합니다.Sorted:를 출력한 다음sortAndPrint를 호출합니다.- 검색 값과 함께
findElement를 호출합니다. getSum을 사용하여Sum: <result>를 출력합니다.
예를 들어 입력이 5, 2, 8, 1, 8인 경우:
Original: 5 2 8 1
Sorted: 1 2 5 8
Found: 8
Sum: 16입력이 10, 30, 20, 40, 15인 경우:
Original: 10 30 20 40
Sorted: 10 20 30 40
Not found: 15
Sum: 100함수가 반복자를 통해 벡터와 함께 작동하는 방식과, std::sort 및 std::find가 올바른 반복자 유형을 제공하는 모든 컨테이너에서 작동하는 방식을 확인해 보세요. 이것이 STL 설계의 강력함입니다. 알고리즘은 컨테이너와 분리되어 있으며, 반복자를 통해서만 연결됩니다.
직접 해보기
#include <iostream>
#include <vector>
#include "DataProcessor.h"
using namespace std;
int main() {
// 입력에서 다섯 개의 정수를 읽기
int num1, num2, num3, num4, searchValue;
cin >> num1;
cin >> num2;
cin >> num3;
cin >> num4;
cin >> searchValue;
// TODO: vector를 생성하고 처음 네 개의 정수를 추가하기
// TODO: "Original: "을 출력하고 printVector 호출하기
// TODO: "Sorted: "을 출력하고 sortAndPrint 호출하기
// TODO: 검색 값으로 findElement 호출하기
// TODO: "Sum: " 다음에 getSum의 결과 출력하기
return 0;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러