STL 선형 자료구조 - 벡터, 리스트, 스택, 큐

Woogle·2023년 4월 21일
0

C++ 공부

목록 보기
26/28

📄 Vector

  • 동적 할당되는 배열.
  • 메모리 heap에 생성되며 각 원소의 메모리 주소가 연속적
  • 임의 원소 접근이 빠르지만, 중간 삽입 삭제 시 메모리의 재할당 및 복사가 발생하므로 느림
#include <vector>		// 헤더 포함
using namespace std;

vector<int> v;			// 선언
v.push_back(1);			// 마지막 원소 삽입
v.pop_back();			// 마지막 원소 삭제
v.front();				// 첫번째 원소
v.back();				// 마지막 원소
v.size();				// 원소의 개수
v.capacity();			// 할당된 메모리 크기
v.clear();				// 전체 원소 삭제

// iterator 및 중간 삽입 삭제
v.begin();				// 첫번째 원소를 가리키는 iterator
v.end();				// 마지막 원소의 다음을 가리키는 iterator
v.erase(iterator);		// iterator가 가리키는 원소 삭제
v.insert(n,x);			// n번째 위치에 x값을 중간 삽입

📄 List

  • 연결 구조(Node)를 가진 자료구조. 연결 리스트(Linked list)라고도 부름
  • 각 원소의 메모리 주소가 비연속적
  • 중간 삽입 삭제가 빠르지만, 임의 원소 접근이 불가능하므로 노드를 순회해서 접근함
#include <list>			// 헤더 포함
using namespace std;

list<int> li;			// 선언
li.push_back(1);		// 원소 삽입
li.push_front(1);		// 앞에 원소 삽입 (중간 삽입 개념)
li.insert(li.end(), 2);	// 중간 원소 삽입 (li.end() 바로 앞에 int 2를 삽입)
li.pop_back()			// 원소 삭제

// 원소 임의 접근이 불가능하기에 iterator로 원소에 접근함
list<int>::iterator it;
for (it = li.begin(); it != li.end(); it++)  
  {
    cout << (*it) << endl;	// 모든 원소 접근 시 iterator로 노드를 순회해야함
  }
li.erase(it);			// 중간 원소 삭제

📄 Stack

  • 후입선출(Last-In-First-Out; LIFO) 방식
  • 스택은 top에서부터 위로 쌓는 방식이고, 마찬가지로 top부터 빠진다.
  • 스택에서 top을 통해 삽입하는 연산을 'push', top을 통해 삭제하는 연산을 'pop'이라고 한다.
#include <stack>	// 헤더 포함
using namespace std;

stack<int> s;		// 선언
s.push(1);			// 원소 삽입 (Last-In)
s.pop();			// 원소 삭제 (First-Out)
s.top();			// 최상위 원소 접근
s.size();			// 원소의 개수
s.empty();			// 원소가 1개 이상 존재하는지 반환 (bool)

📄 Queue

  • 선입선출 (First-In-First-Out; FIFO) 방식
  • 큐는 들어올 때 rear로 들어오지만 나올때는 front부터 빠진다.
  • 큐의 접근은 가장 첫 원소인 front와 끝 원소인 rear만 가능하다.
#include <queue>	// 헤더 포함
using namespace std;

queue<int> q;		// 선언
q.push(1);			// 원소 삽입 (First-In)
q.pop();			// 원소 삭제 (First-Out)
q.front();			// 첫 원소 접근
q.rear();			// 끝 원소 접근
q.size();			// 원소의 개수
q.empty();			// 원소가 1개 이상 존재하는지 반환 (bool)

📄 참고 자료

profile
노력하는 게임 개발자

0개의 댓글