728x90
반응형
C++의 표준 템플릿 라이브러리(STL)는 데이터를 효율적으로 관리하고 처리하기 위한 강력한 도구 모음이에요. 오늘은 STL의 주요 구성 요소인 벡터, 리스트, 맵을 중심으로 살펴보고, 활용 팁도 함께 공유할게요! 😊 준비되셨다면, 바로 시작해 볼까요? 🚀
반응형
1. 벡터: 동적 배열의 강력한 대안 📊
벡터는 크기가 동적으로 변하는 배열로, 요소의 추가와 삭제가 용이합니다.
(1) 기본 사용법
📌 예제
#include <vector>
#include <iostream>
std::vector<int> numbers = {1, 2, 3, 4, 5};
numbers.push_back(6); // 요소 추가
numbers.pop_back(); // 마지막 요소 삭제
for (int num : numbers) {
std::cout << num << " ";
} // 1 2 3 4 5 출력
(2) 주요 함수
- push_back: 요소 추가
- pop_back: 마지막 요소 제거
- size: 현재 크기 반환
- at: 안전하게 요소 접근 (범위 검사 포함)
(3) 벡터의 장단점
- 장점: 배열보다 유연하며, 메모리를 자동으로 관리합니다.
- 단점: 중간 요소 삽입 및 삭제는 느릴 수 있습니다.
2. 리스트: 양방향 연결 리스트 🌐
리스트는 노드 구조를 기반으로 하며, 삽입과 삭제가 효율적입니다. 특히, 자주 변동되는 데이터를 다룰 때 유용해요.
(1) 기본 사용법
📌 예제
#include <list>
#include <iostream>
std::list<int> numbers = {1, 2, 3, 4, 5};
numbers.push_front(0); // 앞에 요소 추가
numbers.push_back(6); // 뒤에 요소 추가
numbers.pop_front(); // 앞 요소 제거
for (int num : numbers) {
std::cout << num << " ";
} // 1 2 3 4 5 6 출력
(2) 주요 함수
- push_front: 앞에 요소 추가
- push_back: 뒤에 요소 추가
- pop_front: 앞 요소 제거
- erase: 특정 위치 요소 제거
(3) 리스트와 벡터의 차이
- 리스트: 삽입과 삭제가 빠르지만, 임의 접근이 느림.
- 벡터: 임의 접근이 빠르지만, 중간 삽입/삭제가 느림.
3. 맵: 키-값 쌍으로 데이터 관리하기 🔑
맵은 데이터를 키와 값의 쌍으로 저장하며, 키를 기준으로 정렬된 상태를 유지합니다.
(1) 기본 사용법
📌 예제
#include <map>
#include <iostream>
std::map<std::string, int> scores;
scores["Alice"] = 90;
scores["Bob"] = 85;
scores["Charlie"] = 95;
for (const auto& pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
(2) 주요 함수
- insert: 새로운 키-값 쌍 추가
- erase: 특정 키 삭제
- find: 키 검색 (반환 값으로 iterator)
- count: 키 존재 여부 확인
(3) 맵과 셋의 차이
- 맵(map): 키-값 쌍 저장
- 셋(set): 중복 없는 단일 값 저장
4. STL 알고리즘: 효율적인 데이터 처리 🚀
STL은 다양한 알고리즘을 제공하여 데이터 검색, 정렬, 변환 등을 쉽게 수행할 수 있게 해줍니다.
(1) 정렬
📌 예제
#include <vector>
#include <algorithm>
#include <iostream>
std::vector<int> numbers = {5, 3, 8, 1, 2};
std::sort(numbers.begin(), numbers.end());
for (int num : numbers) {
std::cout << num << " ";
} // 1 2 3 5 8 출력
(2) 검색
📌 예제
#include <vector>
#include <algorithm>
#include <iostream>
std::vector<int> numbers = {1, 2, 3, 4, 5};
if (std::binary_search(numbers.begin(), numbers.end(), 3)) {
std::cout << "3 is found!" << std::endl;
}
(3) 변환
📌 예제
#include <vector>
#include <algorithm>
#include <iostream>
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::transform(numbers.begin(), numbers.end(), numbers.begin(), [](int x) { return x * 2; });
for (int num : numbers) {
std::cout << num << " ";
} // 2 4 6 8 10 출력
5. 핵심과 주의할 점 ⚡
핵심 요약
- 벡터는 동적 배열로, 크기 변화와 임의 접근에 적합합니다.
- 리스트는 삽입과 삭제가 빈번한 경우 유용합니다.
- 맵은 키-값 쌍으로 데이터를 관리하며, 정렬된 상태를 유지합니다.
- STL 알고리즘을 활용하면 데이터 처리를 더욱 간결하고 효율적으로 구현할 수 있습니다.
알고 있으면 좋은 팁
- 메모리 관리: STL 컨테이너는 메모리를 자동으로 관리하지만, 필요 시 명시적으로 정리(clear)하세요.
- 커스텀 정렬: std::sort에 사용자 정의 비교 함수를 전달해 맞춤 정렬을 구현할 수 있습니다.
📌 예제
std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a > b; }); // 내림차순 정렬
- 성능: 벡터는 대량 데이터 처리에 더 적합하고, 리스트는 작은 데이터셋에서 강력합니다.
6. 마무리 🎉
STL은 C++ 프로그래머의 강력한 무기예요. 컨테이너와 알고리즘의 조합을 잘 이해하면 복잡한 데이터 처리도 간단히 해결할 수 있습니다. 오늘 배운 내용을 실제 코드에 적용하며, STL의 효율성을 직접 경험해 보세요! 다음 시간에는 더 흥미로운 주제를 다뤄보겠습니다. 😊
728x90
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 템플릿 프로그래밍: 제네릭 코드로 효율성 극대화하기 ⚙️ (0) | 2025.01.07 |
---|---|
[C++] 스마트 포인터와 RAII로 메모리 관리 마스터하기 🧠 (0) | 2025.01.07 |
[C++] 상속과 다형성: 코드 재사용성과 유연성 극대화하기 🔁 (0) | 2025.01.06 |
[C++] 객체 지향 프로그래밍 마스터하기: 클래스와 객체의 모든 것! ✨ (0) | 2025.01.06 |
[C++] 배열과 포인터 완벽 이해하기: 차이점과 사용법 🔍 (0) | 2025.01.06 |