C++ STL 벡터(vector)와 리스트(list) 기초 정리
요약
C++ STL 컨테이너 기초
vector와 list
1. STL(Standard Template Library)이란?
STL은 C++에서 자주 사용하는 자료구조와 알고리즘을 미리 구현해 둔 라이브러리이다.
컨테이너(Container): 데이터 저장 (예: vector, list, queue, map)
알고리즘(Algorithm): 정렬, 탐색 등 (예: sort, find)
반복자(Iterator): 컨테이너 순회 도구
이번 자료에서는 가장 기본적인 컨테이너인 vector와 list를 다룬다.
2. vector란?
2.1 개념
vector는 배열(array)을 확장한 형태의 컨테이너이다.
연속된 메모리 공간에 데이터를 저장
크기가 자동으로 증가/감소
인덱스(
[])로 접근 가능
#include <vector>
using namespace std;
vector<int> v;2.2 주요 특징
| 특징 | 설명 |
|---|---|
| 메모리 구조 | 연속적 |
| 접근 속도 | 매우 빠름 (O(1)) |
| 중간 삽입/삭제 | 느림 (O(N)) |
| 사용 난이도 | 쉬움 |
2.3 기본 사용법
원소 추가
v.push_back(10);
v.push_back(20);원소 접근
cout << v[0]; // 10
cout << v.at(1); // 20원소 삭제
v.pop_back(); // 마지막 원소 삭제크기 확인
cout << v.size();2.4 vector 예제
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
for (int i = 1; i <= 5; i++)
v.push_back(i);
for (int i = 0; i < v.size(); i++)
cout << v[i] << " ";
}출력:
1 2 3 4 5
3. list란?
3.1 개념
list는 이중 연결 리스트(doubly linked list) 구조의 컨테이너이다.
각 원소가 이전/다음 원소의 주소를 저장
메모리가 연속적이지 않음
인덱스 접근 불가능
#include <list>
using namespace std;
list<int> l;3.2 주요 특징
| 특징 | 설명 |
|---|---|
| 메모리 구조 | 비연속 |
| 접근 방식 | 반복자(iterator) |
| 중간 삽입/삭제 | 매우 빠름 (O(1)) |
| 임의 접근 | 불가능 |
3.3 기본 사용법
원소 추가
l.push_back(10);
l.push_front(5);원소 삭제
l.pop_back();
l.pop_front();반복자 사용
for (auto it = l.begin(); it != l.end(); it++)
cout << *it << " ";3.4 list 예제
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> l;
l.push_back(10);
l.push_back(20);
l.push_front(5);
for (int x : l)
cout << x << " ";
}출력:
5 10 20
4. vector vs list 비교 정리
| 항목 | vector | list |
|---|---|---|
| 메모리 구조 | 연속 | 비연속 |
| 인덱스 접근 | 가능 | 불가능 |
| 중간 삽입/삭제 | 느림 | 빠름 |
| 캐시 효율 | 좋음 | 나쁨 |
| 주 사용처 | 일반적인 데이터 저장 | 삽입/삭제가 잦은 경우 |
5. 언제 어떤 컨테이너를 쓸까?
vector 사용 권장
값 조회가 많은 경우
인덱스로 접근해야 하는 경우
대부분의 알고리즘 문제
list 사용 권장
중간 삽입/삭제가 매우 빈번한 경우
큐, 덱을 직접 구현하는 연습
반복자 개념 학습 목적
알고리즘 문제 풀이에서는 대부분
vector를 사용한다.
6. 연습문제
#C++#STL#vector#list#자료구조
이 노트는 요약·비평·학습 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
