학습
C++ 기본적인 STL 사용법
C++ 기본적인 STL 사용법 — 초급
기본적인 STL 사용법
1. 도입 (왜 배워야 하는가)
C++의 표준 템플릿 라이브러리(STL)는 데이터 구조와 알고리즘을 구현하는 데 필수적인 도구입니다. 실무에서는 데이터를 효율적으로 처리하고 조작해야 하는 경우가 많기 때문에 STL을 사용하는 능력이 중요합니다. STL을 모른다면, 기본적인 데이터 관리 작업조차 비효율적이고 복잡하게 처리해야 하며, 이로 인해 코드의 유지보수성과 성능이 저하될 수 있습니다. 예를 들어, 배열을 직접 관리하면서 발생할 수 있는 메모리 누수나 인덱스 에러와 같은 문제를 피할 수 있는 방법이 STL입니다.
2. 핵심 개념 설명
STL은 크게 세 가지 요소로 구성됩니다: 컨테이너(Container), 알고리즘(Algorithm), 반복자(Iterator).
컨테이너(Container)
- 데이터를 저장하는 데이터 구조입니다. 예를 들어, 벡터(vector), 리스트(list), 맵(map) 등이 있습니다.
- 비유: 컨테이너는 주방의 그릇입니다. 그릇에 음식을 담듯이, 컨테이너에 데이터를 담습니다.
- 데이터를 처리하는 방법을 정의합니다. 예를 들어, 정렬(sort), 검색(search) 등이 있습니다.
- 비유: 알고리즘은 요리법입니다. 요리법을 따라 음식을 만들듯, 알고리즘을 따라 데이터를 처리합니다.
- 컨테이너의 요소에 접근하는 방법을 제공합니다.
- 비유: 반복자는 그릇에 담긴 음식을 꺼내는 숟가락입니다. 숟가락을 사용해 음식을 하나씩 꺼내듯이, 반복자를 사용해 컨테이너의 요소에 접근합니다.
알고리즘(Algorithm)
반복자(Iterator)
| 용어 | 설명 |
|---|---|
| 컨테이너 | 데이터를 저장하는 구조 |
| 알고리즘 | 데이터를 처리하는 방법 |
| 반복자 | 컨테이너 요소에 접근하는 도구 |
3. 기본 코드 예제
아래는 벡터를 사용하여 정수를 저장하고 출력하는 간단한 예제입니다.
#include <iostream>
#include <vector>
int main() {
// 1. 벡터 객체 생성
std::vector<int> numbers;
// 2. 벡터에 값 추가
numbers.push_back(10); // 10 추가
numbers.push_back(20); // 20 추가
numbers.push_back(30); // 30 추가
// 3. 벡터의 요소 출력
for (int i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " "; // 각 요소 출력
}
return 0;
}
실행 결과:
10 20 30
코드 한 줄씩 동작 설명:
#include <iostream>: 입출력 기능을 사용하기 위해 헤더 파일을 포함합니다.#include <vector>: 벡터를 사용하기 위해 헤더 파일을 포함합니다.std::vector<int> numbers;: 정수를 저장할 빈 벡터를 생성합니다.numbers.push_back(10);: 10을 벡터에 추가합니다.numbers.push_back(20);: 20을 벡터에 추가합니다.numbers.push_back(30);: 30을 벡터에 추가합니다.for (int i = 0; i < numbers.size(); ++i): 벡터의 크기만큼 반복합니다.std::cout << numbers[i] << " ";: 각 요소를 출력합니다.- STL은 C++에서 데이터 구조와 알고리즘을 효율적으로 사용할 수 있게 해줍니다.
- 컨테이너, 알고리즘, 반복자는 STL의 핵심 요소입니다.
- 벡터, 리스트, 맵 등의 다양한 컨테이너를 사용하여 데이터를 관리할 수 있습니다.
- 다음에 학습하면 좋은 주제: STL 알고리즘(정렬, 검색), 리스트와 맵의 사용법, 사용자 정의 데이터 타입과 STL의 통합.
4. 실전 활용 예제
1. 쇼핑몰에서 장바구니 구현
쇼핑몰 애플리케이션에서 사용자가 선택한 상품을 장바구니에 담는 기능을 구현할 수 있습니다. 이때 벡터를 사용하여 장바구니의 상품 목록을 관리합니다.
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> cart; // 장바구니
// 상품 추가
cart.push_back("사과");
cart.push_back("바나나");
cart.push_back("오렌지");
// 장바구니 내역 출력
std::cout << "장바구니에 담긴 상품: ";
for (const auto& item : cart) {
std::cout << item << " "; // 상품 출력
}
return 0;
}
2. 학생 성적 관리
학생들의 성적을 관리하기 위해 벡터를 사용할 수 있습니다. 성적을 추가하고 평균을 계산하는 예제입니다.
#include <iostream>
#include <vector>
int main() {
std::vector<double> grades; // 성적을 저장할 벡터
grades.push_back(85.5);
grades.push_back(90.0);
grades.push_back(78.0);
// 평균 계산
double sum = 0;
for (double grade : grades) {
sum += grade;
}
double average = sum / grades.size(); // 평균 계산
std::cout << "학생들의 평균 성적: " << average << std::endl;
return 0;
}
5. 흔한 실수와 주의사항
실수 1: 벡터의 크기 오류
벡터의 크기가 0일 때 인덱스로 접근하려고 하면 오류가 발생합니다.
std::vector<int> numbers;
std::cout << numbers[0]; // 오류 발생
올바른 코드
if (!numbers.empty()) {
std::cout << numbers[0]; // 안전하게 접근
}
실수 2: 메모리 관리
STL 컨테이너는 자동으로 메모리를 관리하지만, 사용자가 직접 메모리를 관리할 때는 주의가 필요합니다.
int* arr = new int[10]; // 동적 할당
delete[] arr; // 메모리 해제
올바른 코드
std::vector<int> arr; // 벡터 사용으로 자동 메모리 관리