메인 콘텐츠로 건너뛰기

C++ STL 벡터(vector)와 리스트(list) 기초 정리

요약

C++ STL 컨테이너 기초

vectorlist


1. STL(Standard Template Library)이란?

STL은 C++에서 자주 사용하는 자료구조와 알고리즘을 미리 구현해 둔 라이브러리이다.

  • 컨테이너(Container): 데이터 저장 (예: vector, list, queue, map)

  • 알고리즘(Algorithm): 정렬, 탐색 등 (예: sort, find)

  • 반복자(Iterator): 컨테이너 순회 도구

이번 자료에서는 가장 기본적인 컨테이너vectorlist를 다룬다.


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 비교 정리

항목vectorlist
메모리 구조연속비연속
인덱스 접근가능불가능
중간 삽입/삭제느림빠름
캐시 효율좋음나쁨
주 사용처일반적인 데이터 저장삽입/삭제가 잦은 경우

5. 언제 어떤 컨테이너를 쓸까?

vector 사용 권장

  • 값 조회가 많은 경우

  • 인덱스로 접근해야 하는 경우

  • 대부분의 알고리즘 문제

list 사용 권장

  • 중간 삽입/삭제가 매우 빈번한 경우

  • 큐, 덱을 직접 구현하는 연습

  • 반복자 개념 학습 목적

알고리즘 문제 풀이에서는 대부분 vector를 사용한다.


6. 연습문제

  1. 10818 최소, 최대

  2. 2562 최댓값

  3. 3052 나머지

  4. 1546 평균

  5. 10807 개수 세기

  6. 5597 과제 안 내신 분..?

  7. 10871 X보다 작은 수

  8. 4344 평균은 넘겠지

  9. 2577 숫자의 개수

  10. 10810 공 넣기

#C++#STL#vector#list#자료구조

이 노트는 요약·비평·학습 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.