STL (Standard Template Library) : C++ 표준 라이브러리의 일부로 컨테이너, 알고리즘, 반복자 등의 템플릿 기반 구성 요소를 포함한다.
1. 컨테이너
- 모든 컨테이너는 템플릿으로 구현되어 있으므로, 다양한 타입의 데이터를 저장할 수 있다.
- 모든 컨테이너는 메모리 관리를 내부적으로 한다. 메모리 해제를 직접 고려하지 않아도 된다.
- 대부분 컨테이너는 반복자를 제공한다. 따라서 내부 구현을 몰라도 동일한 방식으로 컨테이너를 순회할 수 있다.
1-1. 벡터
- 템플릿 클래스로 구현되어 특정 타입에 종속되지 않는다.
- 삽입되는 원소 개수에 따라 내부 배열의 크기가 자동으로 조정된다.
- 임의 접근이 가능하다. (인덱스를 통해 특정 위치에 접근)
- 삽입 / 삭제는 맨 뒤에 하는 게 좋다. (중간 삽입/삭제는 배열 복사가 필요하므로 비효율적)
1-1-1. 벡터를 선언하는 방법
#include <vector>
// 1. 기본 생성 및 초기화 없이 선언
vector<int> vec1;
// 2. 특정 크기와 초기값으로 벡터 선언
vector<int> vec2(5, 10); // 크기 5, 모든 원소가 10으로 초기화
// 3. 리스트 초기화로 벡터 선언
vector<int> vec3 = {1, 2, 3, 4, 5};
// 4. 다른 벡터를 기반으로 복사 초기화
vector<int> vec3 = {1, 2, 3, 4, 5};
vector<int> vec4(vec3); // vec3의 복사본 생성
//vector<int> vec4 = vec3 하면 대입이 됨
// 5. 2차원 벡터 초기화
vector<vector<int>> vec2D(3, vector<int>(4, 7)); // 3x4 행렬, 모든 원소가 7로 초기화
1-1-2. 벡터의 동작
- push_back
- 벡터의 맨 밑에 원소를 추가하는 메서드
- 원소의 개수가 늘어남에 따라 크기는 자동으로 증가하므로, 별도의 메모리 관리를 신경 쓸 필요가 없다.
- ex : vec.push_back(10)
- pop_back
- 벡터의 맨 끝에 원소를 제거하는 메서드
- 맨 끝 원소가 제거되면 벡터 크기가 자동으로 줄어든다.
- ex : vec.pop_back()
- size
- 현재 벡터의 크기(원소 개수)를 확인할 때 사용하는 메서드.
- 보통 벡터의 전체 원소를 대상으로 반복문을 돌릴 때 유용하게 쓰인다.
- ex : vec.size()
- erase
- 특정 위치(또는 구간)의 원소를 제거하는 함수.
- 벡터는 내부적으로 배열을 사용하므로, 중간 원소를 삭제할 때, 많은 원소를 옮겨야 할 수 있다.
- 따라서 시간 복잡도가 커질 수 있으므로, 자주 사용하지 않는 것이 좋다.
1-2. 맵 (연관 컨테이너)
: 이름을 검색하여 연락처를 찾듯이, 특정 키를 사용하여 값을 검색하는 기능을 제공하는 컨테이너.
- 키-값 쌍은 pair<const Key, Value> 형태로 저장.
- 키 값을 기준으로 내부 데이터가 자동으로 정렬된다.
- 중복된 키 값을 허용하지 않는다.
1-2-1. 맵을 선언하는 방법
: 맵을 선언할 때는 키-값 쌍을 저장하기 위해 키 타입과 값 타입 두 가지를 지정해야 한다. 키 타입은 비교 연산이 가능해야 한다.
#include <iostream>
#include <map>
using namespace std;
// 정수 키와 문자열 값을 저장하는 map 예제
int main() {
map<int, string> studentMap;
// 요소 추가
studentMap[101] = "Alice";
studentMap[102] = "Bob";
studentMap[103] = "Charlie";
// 요소 출력
for (const auto& pair : studentMap) {
cout << "ID: " << pair.first << ", Name: " << pair.second << endl;
}
return 0;
}
/*
출력 결과:
ID: 101, Name: Alice
ID: 102, Name: Bob
ID: 103, Name: Charlie
*/'C++ 공부' 카테고리의 다른 글
| 인터페이스와 추상클래스의 차이점 (0) | 2025.09.02 |
|---|---|
| C++언어 기초 - 8. SOLID 원칙 (2) | 2025.09.01 |
| C++언어 기초 - 6. 템플릿의 개념 (0) | 2025.08.26 |
| C++언어 기초 - 5. 자원 관리하기 (6) | 2025.08.26 |
| 기본적인 Class 생성해보기 (0) | 2025.08.21 |