덱(Double Ended Queue, 데크)은 큐(Queue) 자료구조의 한 종류로, 앞(front)과 뒤(rear) 양쪽 끝에서 모두 삽입과 삭제 연산을 수행할 수 있는 자료구조입니다. 일반적인 큐는 한쪽에서만 삽입하고 반대쪽에서만 삭제할 수 있지만, 덱은 데이터를 앞과 뒤 어느 위치에서든 추가하거나 제거할 수 있어 훨씬 유연하게 활용됩니다.C++ 표준 템플릿 라이브러리(STL)는 이러한 덱을 <deque> 헤더 파일을 통해 기본으로 제공하며, 별도의 직접 구현 없이도 다양한 멤버 함수를 손쉽게 사용할 수 있습니다.S
C++ STL의 std::forward_list는 단일 연결 리스트(singly linked list)를 구현한 컨테이너입니다. 양방향 리스트인 std::list가 각 노드에서 이전(previous)과 다음(next) 요소를 모두 추적하는 것과 달리, forward_list는 다음 요소의 위치만 기억하기 때문에 요소 하나를 저장하는 데 필요한 메모리 공간이 더 적습니다.다만 이러한 단방향 구조의 특성상 개별 요소에 직접 접근(임의 접근)할 수 없고, 역방향으로 순회하는 것도 불가능하다는 단점이 있습니다. 따라서 forward_lis
C++ STL의 list(리스트)는 비연속적인(non-contiguous) 메모리 할당을 허용하는 시퀀스 컨테이너입니다. vector와 달리 내부적으로 이중 연결 리스트(doubly linked list) 방식으로 동작하기 때문에 임의 접근(random access)은 지원하지 않지만, 위치(iterator)를 찾은 이후에는 삽입과 삭제가 O(1)의 매우 빠른 속도로 처리된다는 장점이 있습니다. 반면 요소들이 메모리상에 연속되어 있지 않아 처음부터 끝까지 순회(traversal)할 때는 vector보다 느릴 수 있습니다. 따라서
맵(Map)은 연관 컨테이너(associative container)로, 요소들을 키(key)와 값(value)이 대응되는 형태로 저장합니다. 각 요소는 키 값(key value)과 매핑된 값(mapped value)으로 구성되며, 동일한 키 값을 가지는 두 요소는 존재할 수 없습니다. 이 글에서는 C++ STL의 map 컨테이너를 선언하고, 요소를 삽입·검색·삭제하는 기본적인 방법을 예제 코드와 함께 살펴보겠습니다.맵에서 사용되는 주요 멤버 함수m.find() – 지정한 키(예: b)를 가진 요소를 찾아 해당 위치의 반
멀티맵(Multimap)은 map과 거의 유사하지만, 하나의 중요한 차이점이 있습니다. 바로 여러 개의 요소가 동일한 키(key)를 가질 수 있다는 점입니다. 다만 키와 매핑된 값으로 이루어진 쌍(pair) 자체는 멀티맵 내에서 유일해야 합니다.이번 글에서는 STL의 멀티맵을 구현하고, 주요 멤버 함수들을 실제 코드로 살펴보겠습니다.주요 멤버 함수mm::find() – 멀티맵에서 지정한 키(예: b)를 가진 요소의 반복자(iterator)를 반환합니다. 찾지 못하면 end 반복자를 반환합니다.mm::erase() – 멀티맵에서 해당
multiset(다중 집합)은 C++ STL에서 제공하는 연관 컨테이너(associative container)의 일종으로, 중복된 값을 가지는 여러 요소를 저장할 수 있다는 점이 set과 가장 큰 차이점입니다. 내부적으로 균형 이진 탐색 트리(레드-블랙 트리)로 구현되어 있어 삽입, 삭제, 검색 연산이 모두 O(log n)의 시간 복잡도를 가집니다. multiset의 주요 함수 이번 예제에서 사용되는 multiset의 핵심 멤버 함수는 다음과 같습니다. ms.size() : multiset에 저장된 요소의 개수를 반환합니다. m
C++ STL(표준 템플릿 라이브러리)에서 제공하는 next_permutation 함수는 지정된 범위 [first, last] 내의 요소들을 사전순으로 다음에 오는 순열로 재배치하는 기능을 수행합니다. 여기서 순열(permutation)이란 N개의 원소가 가질 수 있는 N!가지 배열 조합 각각을 의미합니다. 이 글에서는 STL의 next_permutation을 활용해 모든 순열을 출력하는 C++ 프로그램을 소개합니다.동작 원리 및 알고리즘프로그램의 전체적인 흐름은 다음과 같습니다.시작 정수형 배열 변수 elements[]를
Pair(쌍)는 두 개의 데이터 객체로 구성된 간단한 컨테이너입니다. 서로 다른 자료형의 두 값을 하나로 묶어 관리할 수 있어 C++ 프로그래밍에서 매우 유용하게 활용됩니다. Pair의 기본 구조 Pair는 고정된 순서(first, second)를 가지며, 각 요소는 멤버 변수로 접근합니다. first = 첫 번째 요소 (first라는 이름으로 참조) second = 두 번째 요소 (second라는 이름으로 참조) Pair는 대입, 비교, 복사가 모두 가능하며, 자료형이 서로 다른 두 값을 하나의 단위로 결합할 때 주로 사용됩니다
C++ STL의 prev_permutation 함수는 [first, last] 범위 내의 요소들을 사전순으로 바로 이전에 해당하는 순열로 재배치하는 데 사용됩니다. 순열(permutation)이란 N개의 요소를 나열할 수 있는 N!가지의 모든 가능한 배열을 의미합니다. 이 글에서는 STL의 prev_permutation을 활용하는 C++ 프로그램을 소개합니다. prev_permutation이란? prev_permutation은 현재 순열을 사전순(lexicographical order) 기준으로 바로 이전 순열로 변환합니다. 만약
C++ STL(표준 템플릿 라이브러리)은 다양한 컨테이너 어댑터(container adapter)를 제공하는데, 그중 priority_queue(우선순위 큐)는 항상 큐의 첫 번째 원소가 전체 원소 중 가장 큰 값을 갖도록 관리하는 자료구조입니다. 우선순위가 높은 원소가 낮은 원소보다 먼저 처리되며, 내부적으로는 힙(heap) 알고리즘을 통해 정렬 상태가 유지됩니다. 주요 멤버 함수 이번 예제에서 사용하는 priority_queue의 대표 함수는 다음과 같습니다. pq.size() : 큐에 저장된 원소의 개수를 반환합니다.
큐(Queue)는 선입선출(FIFO, First In First Out) 방식으로 동작하는 대표적인 선형 자료구조입니다. 가장 먼저 삽입된 요소가 가장 먼저 처리되는 규칙에 따라 연산이 수행되며, 작업 대기열이나 메시지 버퍼 등 다양한 분야에서 널리 활용됩니다. C++ STL 큐의 주요 멤버 함수 C++ 표준 템플릿 라이브러리(STL)에서는 <queue> 헤더를 통해 큐를 기본적으로 제공하므로, 별도의 자료구조 구현 없이도 손쉽게 사용할 수 있습니다. 이번 예제에서 사용하는 핵심 함수는 다음과 같습니다. q.size(
집합(Set)이란? 집합(Set)은 모든 요소가 고유한 값을 가져야 하는 추상 데이터 타입(ADT)입니다. 요소의 값 자체가 식별자 역할을 하기 때문에 중복된 값은 허용되지 않습니다. 또한 한 번 집합에 추가된 요소의 값은 직접 수정할 수 없으며, 값을 바꿔야 할 경우에는 해당 요소를 삭제한 뒤 수정된 값을 다시 삽입해야 합니다. C++ STL의 std::set은 내부적으로 균형 이진 탐색 트리(레드-블랙 트리) 기반으로 구현되어 있어, 요소가 항상 오름차순으로 정렬된 상태를 유지하며 삽입·삭제·탐색 연산이 O(log n)의 시간
두 집합의 차집합(Difference)은 첫 번째 집합에는 포함되어 있지만 두 번째 집합에는 없는 원소들로만 구성됩니다. set_difference 함수가 복사하는 원소는 항상 첫 번째 집합에서 가져오며, 원래의 순서가 그대로 유지됩니다. 이때 주의할 점은 두 집합의 원소들이 반드시 미리 정렬되어 있어야 한다는 것입니다.C++에서 자주 사용되는 대표적인 집합 연산은 다음과 같습니다.합집합(Union): 두 집합의 모든 원소를 포함교집합(Intersection): 두 집합에 공통으로 존재하는 원소만 포함대칭 차집합(Symmetric
두 집합의 교집합(intersection)은 두 집합에 공통으로 존재하는 원소들만으로 구성됩니다. std::set_intersection 함수가 복사하는 원소는 항상 첫 번째 집합에서 가져오며, 원래의 순서를 그대로 유지합니다. 이 함수를 사용하려면 두 집합의 원소들이 반드시 이미 정렬되어 있어야 한다는 점에 유의해야 합니다.주요 집합 연산의 종류C++ STL에서 자주 사용되는 집합 연산은 다음과 같습니다.합집합(Union) — 두 집합의 모든 원소를 포함교집합(Intersection) — 두 집합에 공통으로 있는 원소만 포함대칭
C++ STL의 set_symmetric_difference란?이 글에서는 C++ 표준 템플릿 라이브러리(STL)에서 제공하는 set_symmetric_difference 함수를 활용해 두 집합의 대칭차집합을 구하는 프로그램을 살펴봅니다.대칭차집합(symmetric difference)은 두 집합 중 어느 한쪽에는 속하지만 양쪽 모두에는 속하지 않는 원소들로 구성된 집합입니다. 수학적으로 배타적 논리합(XOR)과 같은 개념으로, 두 집합의 합집합에서 교집합을 제거한 결과라고 이해할 수 있습니다.C++ STL의 주요 집합 연산STL
두 집합의 합집합(Union)은 어느 한쪽 집합 또는 양쪽 집합 모두에 존재하는 원소들로 구성됩니다. 이때 첫 번째 집합에 이미 동일한 원소가 있는 경우, 두 번째 집합의 해당 원소는 결과 집합에 중복되어 복사되지 않습니다.C++ STL에서 대표적인 집합 연산은 다음과 같습니다.합집합 (Set Union)교집합 (Set Intersection)대칭 차집합 또는 배타적 OR (Symmetric Difference)차집합 또는 뺄셈 (Set Difference)알고리즘시작 정수 벡터 v와 반복자(iterator) st를 선언한다
이 C++ 프로그램에서는 STL(표준 템플릿 라이브러리)의 list 컨테이너를 활용하여 요소를 삽입하고 정렬된 상태로 출력하는 메뉴 기반 프로그램을 구현합니다. 사용자가 원하는 값을 계속 추가할 수 있고, 언제든지 현재까지 입력된 값들을 오름차순으로 정렬하여 확인할 수 있는 구조입니다.사용되는 주요 함수 및 설명여기서 사용된 함수들: l.push_back() = 리스트의 맨 뒤에 새로운 요소를 추가합니다. l.sort() = 리스트의 모든 요소를 오름차순으로 정렬합니다. ※ 위에서 l은 list 객체를
스택(Stack)은 데이터의 삽입과 삭제가 정해진 순서에 따라 수행되는 선형(linear) 자료구조입니다. 이 순서는 LIFO(Last In First Out, 후입선출) 또는 FILO(First In Last Out, 선입후출) 방식으로 설명되며, 쉽게 말해 가장 나중에 들어간 데이터가 가장 먼저 꺼내지는 구조입니다. STL stack의 주요 멤버 함수 C++ 표준 라이브러리(STL)의 stack 컨테이너 어댑터는 다음과 같은 핵심 멤버 함수를 제공합니다. s.size() : 스택에 저장된 요소의 개수를 반환합니다. s.push
벡터(Vector)는 동적 배열처럼 작동하는 C++ STL의 대표적인 시퀀스 컨테이너입니다. 요소가 삽입되거나 삭제될 때 크기가 자동으로 조절되며, 저장 공간 역시 컨테이너가 스스로 관리합니다. 벡터의 요소들은 연속된 메모리 공간에 배치되기 때문에 반복자(iterator)를 사용하여 순차적으로 접근하고 탐색할 수 있습니다. 또한 데이터는 벡터의 시작 위치, 중간, 끝 어디에서든 자유롭게 삽입하거나 삭제할 수 있습니다.사용된 함수와 설명이번 예제에서 활용되는 벡터의 주요 멤버 함수는 다음과 같습니다.여기서 사용된 함수 목록:
C++ STL에서 map과 multimap은 기본적으로 요소를 오름차순으로 저장합니다. 하지만 템플릿 인자로 std::greater 함수자를 전달하면 요소를 내림차순으로 저장할 수 있습니다. 이 글에서는 내림차순 map과 multimap의 사용법을 예제 코드와 함께 살펴보겠습니다. 내림차순 map에서 사용되는 주요 함수 m.find() – map에서 키 값 b를 가진 요소를 찾으면 해당 위치의 반복자(iterator)를 반환하고, 찾지 못하면 end() 반복자를 반환합니다. m.erase() – map에서 지