학습
C++ 고급 STL 사용법
C++ 고급 STL 사용법 — 고급
고급 STL 사용법
1. 도입 (왜 배워야 하는가)
C++의 표준 템플릿 라이브러리(STL)는 데이터 구조와 알고리즘의 강력한 도구 모음을 제공합니다. 실무에서 STL을 잘 활용하면 코드의 재사용성, 가독성, 유지보수성을 크게 향상시킬 수 있습니다. 예를 들어, 복잡한 데이터 처리나 검색 기능을 구현할 때 STL의 컨테이너와 알고리즘을 사용하면 개발 시간이 단축되고 버그 발생 가능성이 줄어듭니다.
반면, STL을 모르면 기본적인 데이터 구조를 스스로 구현해야 하며, 이로 인해 코드의 복잡성이 증가하고, 성능 최적화에도 한계가 생길 수 있습니다. 결과적으로 생산성이 낮아지고, 유지보수가 힘든 코드가 생성될 수 있습니다.
2. 핵심 개념 설명
STL의 주요 구성 요소는 컨테이너, 알고리즘, 이터레이터입니다.
| 용어 | 설명 |
|---|---|
| 컨테이너 | 데이터를 저장하는 구조 (예: 벡터, 리스트, 맵 등) |
| 알고리즘 | 데이터를 처리하는 함수 (예: 정렬, 검색 등) |
| 이터레이터 | 컨테이너 요소에 접근하는 방법 |
실생활 비유로, 컨테이너는 상자, 알고리즘은 상자 안의 물건을 정리하는 방법, 이터레이터는 상자를 열고 물건을 꺼내는 도구라고 할 수 있습니다.
3. 기본 코드 예제
여기서는 std::vector와 std::sort를 사용하여 정수 배열을 정렬하는 기본적인 예제를 보여줍니다.
#include <iostream>
#include <vector>
#include <algorithm> // std::sort 필요
int main() {
std::vector<int> numbers = {5, 2, 8, 1, 4}; // 정수 벡터 선언 및 초기화
std::sort(numbers.begin(), numbers.end()); // 벡터를 정렬
for (int n : numbers) { // 정렬된 벡터의 요소 출력
std::cout << n << " "; // 각 요소를 출력
}
return 0;
}
실행 결과:
1 2 4 5 8
동작 설명:
#include <iostream>: 입출력 스트림을 포함합니다.#include <vector>: 벡터를 사용하기 위한 헤더를 포함합니다.#include <algorithm>: 정렬 알고리즘을 포함합니다.std::vector<int> numbers = {5, 2, 8, 1, 4};: 정수형 벡터를 선언하고 초기화합니다.std::sort(numbers.begin(), numbers.end());: 벡터의 시작과 끝을 지정하여 정렬합니다.for (int n : numbers) { std::cout << n << " "; }: 정렬된 숫자를 출력합니다.- STL은 C++에서 데이터 구조와 알고리즘을 쉽게 사용할 수 있게 해줍니다.
- 컨테이너, 알고리즘, 이터레이터의 개념을 이해해야 합니다.
- 실무에서 벡터, 리스트, 맵 등을 활용하여 작업을 간소화 할 수 있습니다.
- 다음 주제로는
std::map과std::set의 활용법을 추천합니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니 구현
쇼핑몰에서 장바구니에 상품을 추가하고 가격을 계산하는 기능을 구현할 때, std::vector와 std::accumulate를 사용할 수 있습니다.
#include <iostream>
#include <vector>
#include <numeric> // std::accumulate 필요
int main() {
std::vector<double> cart = {19.99, 5.49, 3.99}; // 장바구니에 담긴 상품 가격
double total = std::accumulate(cart.begin(), cart.end(), 0.0); // 총 가격 계산
std::cout << "총 가격: " << total << "원" << std::endl; // 총 가격 출력
return 0;
}
실행 결과:
총 가격: 29.47원
예제 2: 사용자 입력으로 리스트 구성
사용자가 입력한 숫자를 벡터에 추가하고 정렬하는 예제입니다.
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers;
int input;
std::cout << "정수를 입력하세요 (0 입력 시 종료): ";
while (std::cin >> input && input != 0) {
numbers.push_back(input); // 입력된 정수를 벡터에 추가
}
std::sort(numbers.begin(), numbers.end()); // 정렬
std::cout << "정렬된 숫자들: ";
for (int n : numbers) {
std::cout << n << " "; // 정렬된 숫자 출력
}
return 0;
}
실행 결과:
정수를 입력하세요 (0 입력 시 종료): 7 3 2 9 0
정렬된 숫자들: 2 3 7 9
5. 흔한 실수와 주의사항
실수 1: 벡터의 크기 초과 접근
std::vector<int> vec = {1, 2, 3};
std::cout << vec[3]; // 벡터의 크기를 초과하여 접근 (틀린 코드)
올바른 코드:
if (index < vec.size()) {
std::cout << vec[index]; // 안전한 접근
}
실수 2: 잘못된 정렬 기준
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
정렬 기준을 잘못 설정하면 예상과 다른 결과를 초래할 수 있습니다. 항상 정렬 기준을 명확히 하세요.