stable_sort는 <algorithm>에 정의된 함수로, 주어진 범위의 요소들을 안정적으로 정렬한다. 여기서 안정적이라는 의미는 동일한 키를 가진 요소들의 상대적인 순서가 보존된다는 것이다.정렬 안정성: 동일한 값의 요소가 정렬 후에도 입력 순서를 유지한다.
std::fill_n은 <algorithm> 헤더에 정의된 함수로, 주어진 범위에서 처음 n개의 요소를 특정 값으로 채우는 작업을 수행한다. 특정 범위를 초기화하거나 값을 일괄적으로 변경할 때 사용할 수 있다.first : 값을 채우기 시작할 반복자n : 채울 요
set은 순서가 있는 고유한 원소의 집합이다. set은 중복을 허용하지 않고, 내부적으로 균형 이진 탐색 트리가 구현되어 있기 때문에 정렬된 상태로 데이터를 저장한다.중복 허용 X: 중복된 값을 저장할 수 없다.자동 정렬: 원소가 삽입될 때 자동으로 정렬된다.시간 복잡
std::string 클래스에서 size()와 length() 는 문자열의 길이를 구할 때 사용한다.실행 결과
string::find()와 <algorithm> 헤더의 std::find() 함수는 모두 검색이라는 공통된 기능을 수행하지만, 사용 방법과 동작 방식에서 차이가 있다.string::find()는 std::string 클래스의 멤버 함수로, 문자열 내에서 특정 문
string::npos는 std::string 클래스에서 특별한 상수 값으로 정의되어 있다. 주로 문자열 검색 함수(find, rfind, find_first_of 등)의 반환값을 확인할 때 사용되며, 특정 검색 연산에서 "찾지 못함"을 나타낸다.npos는 size_t
정규 표현식(Regular Expression, Regex)은 특정 패턴을 가진 문자열을 찾거나 수정하는 데 사용되는 도구다. <regex> 헤더를 사용해서 정규 표현식을 다룰 수 있다. 문자열 검색, 데이터 검증, 텍스트 치환 등의 작업에 유용하게 사용된다.문자
문자열의 문자를 대문자 또는 소문자로 변환할 때 toupper와 tolower 함수를 사용한다. <cctype> 헤더 파일에 포함되어 있다.문자(char)를 대문자로 변환한다.만약 입력이 이미 대문자이거나 대문자로 변환할 수 없는 문자라면 그대로 반환한다.문자(c
size_t는 부호 없는 정수형(unsigned integer)이며, 주로 데이터 크기(길이) 또는 메모리 용량을 나타내는 데 사용된다. 부호가 없기 때문에 음수 값이 없고, 항상 0 이상의 값만 표현할 수 있다.size_t는 음수를 표현할 필요가 없는 경우, 특히 데
assign 함수는 문자열 객체에 새로운 문자열을 대입하거나 초기화할 때 사용된다.
swap() 함수는 두 변수의 값을 교환하는 함수이다. 교환 대상이 메모리 상에서 직접 바뀌기 때문에, 별도의 임시 변수를 사용할 필요가 없다.⦁ 기본 자료형⦁ 벡터내부적으로 요소를 하나씩 복사하지 않고 포인터를 교환하기 때문에 매우 빠르다.std::vector나 st
포인터를 사용해서 매개변수로 배열을 넘길 수 있다.배열의 크기를 고정해서 명시한 후, 매개변수로 배열을 넘길 수 있다.참조자를 명시해서 배열을 넘길 수 있습니다. 배열 참조는 배열 크기를 고정하면서, 포인터 사용보다 타입 안전성을 보장한다.동적 크기의 배열이 필요한 경
push_back은 이미 만들어진 객체를 컨테이너에 넣을 때 사용한다.쉽게 말해, 이미 완성된 물건을 "상자"(std::vector)에 넣는 방식이다.이미 만들어진 객체를 복사하거나 이동해서 넣음추가하는 과정에서 객체가 한 번 더 복사되거나 이동될 수 있음1개의 인자만
"하나의 인터페이스가 여러 형태로 동작하는 것"을 의미한다. 다형성은 크게 두 가지로 나뉜다 1\. 정적 다형성 (Static Polymorphism) 2\. 동적 다형성 (Dynamic Polymorphism)정적 다형성은 컴파일 시점에 결정된다. 대표적으로 함
enum은 열거형 데이터 타입으로, 상수 값에 의미 있는 이름을 부여하기 위해 사용된다. 쉽게 말해, 숫자를 이름으로 관리하는 방법이다.출력:SUNDAY는 기본값이 0, 그 다음 값은 1씩 증가정수 값으로 비교 및 연산 가능값을 수동으로 설정할 수도 있다.여기서 SUC
람다 함수는 함수를 한 줄로 간단히 정의할 수 있는 문법이다. 코드가 간결해지고, 함수 포인터나 콜백을 작성할 때 유용하다.\[캡처] : 람다 함수가 외부 변수를 캡처(참조 또는 복사)하는 방식(매개변수) : 함수의 입력값\-> 반환형 : 반환 타입(생략 가능), 생
std::greater<>와 std::less<>는 C++ 표준 라이브러리의 <functional> 헤더에 정의된 함수 객체다. 이들은 비교 연산을 수행하는 데 사용되며, 특히 정렬이나 우선순위 큐와 같은 STL 컨테이너에서 유용하게 활용된다.기본적으로
참조자는 포인터와 유사하지만, 기존 변수에 대한 별칭(Alias)을 제공하는 개념으로, 포인터와는 몇 가지 중요한 차이가 있다.ref는 val이 저장된 메모리 공간을 참조한다.ref에 값을 대입하면 원본 변수 val도 변경된다.참조자는 포인터처럼 메모리 주소를 직접 들
erase() 함수는 컨테이너에서 요소를 제거할 때 사용하는 함수이다. 컨테이너 종류에 따라 동작이 약간 다르다.단일 요소 삭제범위 삭제erase()를 호출하면 삭제된 요소 뒤에 있는 요소들이 앞으로 이동하며, 모든 요소가 재배치된다.시간복잡도는 O(n)으로, 삭제된
특정 범위에서 가장 작은 값을 가지는 요소를 찾는데 사용된다. algorithm 헤더에 포함된 함수다.first : 탐색 시작 지점을 나타내는 반복자last : 탐색 종료 지점을 나타내는 반복자 (탐색 범위에 포함되지 않음)comp (선택적) : 사용자 정의 비교 함수
substr() 함수는 C++의 std::string 클래스에서 제공하는 멤버 함수로, 문자열의 특정 부분을 추출하는 데 사용된다.pos : 시작 위치 (기본값은 0). 추출할 부분 문자열의 시작 인덱스len : 길이 (기본값은 npos). 추출할 부분 문자열의 길이.
append() 함수는 std::string 클래스에서 문자열을 덧붙이는 데 사용되는 멤버 함수이다. 기존 문자열에 새로운 문자열을 추가하거나, 지정된 범위의 문자열을 추가할 수 있다.str : 추가할 문자열subpos, sublen : str의 특정 부분을 추가할 때
3\. 변수로 배열 크기를 지정하려면 동적 메모리 할당(new, std::vector)을 사용해야 한다.
unordered_map은 키-값(key-value) 쌍을 저장하는 해시 테이블 기반의 자료 구조이다. 빠른 탐색과 삽입, 삭제를 제공하며, 키의 순서는 유지되지 않는다.해시 테이블 기반 : 키를 해시 함수로 처리하여 내부적으로 저장O(1) 시간 복잡도 : 평균적으로
포인터 변수: 메모리의 주소를 저장하는 변수포인터를 통해 특정 메모리 주소로 이동해서 데이터를 참조하거나 수정할 수 있음자료형 + \* 변수명포인터 변수의 자료형은 포인터가 가리키는 메모리의 데이터를 어떤 타입으로 해석할지를 정의하는 것예: int\*는 주소를 int로
scanf는 입력받은 값을 저장하기 위해 변수의 메모리 주소를 필요로 한다.이는 함수가 주소를 통해 원래 변수의 값을 변경할 수 있도록 하는 방식으로, 위 코드의 Test(&a)와 동일한 원리다.
const는 값의 변경을 막을 때 사용된다. 하지만 const가 포인터와 함께 사용될 때는 위치에 따라 의미가 달라진다.const는 "절대 값을 변경할 수 없다"보다는 "값을 변경하지 말라"는 의도를 나타낸다. 따라서 코드 작성 시 const를 적절히 사용하면 의도하지
구조체 변수의 주소를 가리키는 포인터이다. 이를 통해 구조체의 멤버에 접근하거나 구조체 데이터를 동적으로 관리할 수 있음구조체 포인터를 통해 멤버에 접근할 때는 ->(화살표 연산자)를 사용하거나 (\*구조체 포인터명).구조체 멤버 변수 형식으로 선언함출력 결과:구조체
특정 함수를 가리키는 포인터이다. 이를 사용하면 함수 호출을 동적으로 결정하거나 콜백 함수로 활용할 수 있다.함수는 이름 자체가 주소이다.함수 포인터를 선언할 때는 함수의 반환 타입과 매개변수 형태를 맞춰야 함일반 함수:매개변수와 반환값이 있는 함수:함수 포인터는 콜백
벡터의 데이터를 배열처럼 사용할 수 있게 해주는 유용한 함수이다. 벡터 내부의 연속된 메모리 블록의 시작 주소를 반환한다.공통점data()와 &vec\[0] 모두 벡터의 첫 번째 요소를 가리키는 포인터를 반환함차이점data()가 반환한 포인터는 벡터의 크기나 용량이 변
동적 자원(예: 동적 메모리, 파일 핸들) 관리를 직접 구현해야 함본문 추가가 가능하며, 동적 자원 해제 등 정리 작업에 사용함사용자 정의 소멸자가 있을 경우, 컴파일러가 생성하는 기본 소멸자보다 약간의 실행 오버헤드가 있을 수 있음동적 자원이 없을 경우, 컴파일러가
메모리 해제delete는 동적으로 할당된 메모리를 힙에서 해제함이는 소멸자의 유무와 상관없이 이루어짐소멸자 호출객체에 소멸자가 정의되어 있다면, delete가 호출될 때 소멸자가 먼저 실행됨소멸자가 실행된 이후에 메모리가 해제됨소멸자가 없으면 클래스 내부에서 수행해야
스마트 포인터는 C++에서 메모리 관리를 자동화하기 위해 제공되는 클래스 템플릿으로, 객체의 생명 주기를 관리하고 메모리 누수를 방지해주기 때문에 대부분의 경우 명시적으로 소멸자를 선언하지 않아도 되지만 스마트 포인터 사용여부와 상관없이, 클래스의 특성에 따라 소멸자가
static 변수는 클래스 단위로 관리되며, 모든 객체에서 값을 공유함객체 간의 값 변경은 즉시 공유됨프로그램 시작 시 한 번 초기화되며, 프로그램 종료 시까지 유지됨객체 생성, 소멸과는 무관함클래스 이름으로 클래스이름::변수명 형식으로 접근 가능함
요소를 참조만 할 뿐 소유권을 가지지 않기 때문에 참조 카운트를 증가시키지 않는다.shared_ptr끼리 상호 참조할 경우 메모리가 해제되지 않는 문제를 방지한다.순환 참조 문제가 없는 경우에는 필요하지 않으며, 주로 복잡한 객체 관계가 있는 상황에서 유용하다.weak
컴파일러가 변수의 데이터 타입을 자동으로 추론하도록 하는 키워드변수 선언 시 초기화 값의 타입을 컴파일러가 분석해서 자동으로 결정하므로 초기화 값이 반드시 필요함복잡한 데이터 타입을 간결하게 선언 가능함템플릿과 조합해서 사용하면 코드의 간결성과 유연성이 향상됨함수의 매
컨테이너의 요소를 정렬하는데 사용되는 알고리즘 함수시작\_반복자: 정렬을 시작할 위치끝\_반복자: 정렬이 끝나는 위치(포함되지 않음)비교\_함수: 선택 사항. 커스텀 비교 기준 제공 \-아무것도 안 적었을 때 - 오름차순 \-std::less<> - 오름차순
컨테이너에서 특정 값을 검색하는 데 사용되는 알고리즘 함수시작\_반복자: 탐색을 시작할 위치끝\_반복자: 탐색이 끝나는 위치(포함되지 않음)검색\_값: 찾고자 하는 값값을 찾은 경우: 해당 값의 반복자(iterator) 반환값을 찾지 못한 경우: 끝\_반복자 반환std
컨테이너의 요소에 대해 지정된 연산을 적용하고, 결과를 저장하는 데 사용되는 알고리즘 함수다.입력\_시작: 변환을 시작할 첫 번째 요소의 반복자입력\_끝: 변환을 종료할 위치(포함되지 않음)결과\_시작: 변환된 결과를 저장할 위치의 반복자함수 또는 람다: 각 요소에 적
컨테이너의 요소를 지정된 연산으로 누적해서 계산하는 데 사용되는 알고리즘 함수다.std::accumulate는 기본적으로 더하기 연산을 수행하지만, 커스텀 연산을 지정하여 다양한 방식으로 누적 계산이 가능하다. 이 함수는 시간 복잡도 O(n)으로 동작한다.시작\_반복자
컨테이너의 요소에 순차적으로 접근하기 위한 객체다. 반복자를 사용하면 데이터 구조에 대한 세부 구현을 알 필요 없이, 동일한 방식으로 요소를 순회하거나 조작할 수 있다.begin() : 컨테이너의 첫 번째 요소를 가리키는 반복자를 반환end() : 컨테이너의 마지막 요
std::distance는 두 반복자 사이의 요소 개수를 반환하는 함수로, 시간 복잡도는 반복자의 종류에 따라 다르다.임의 접근 반복자(random access iterator): std::vector, std::array 같은 컨테이너에 사용되며, 시간 복잡도는 O(
base() 함수는 역방향 반복자(reverse_iterator)가 실제로 가리키는 순방향 반복자를 반환한다.반환된 순방향 반복자는 역방향 반복자가 가리키는 현재 요소의 다음 요소를 가리킨다.base() 함수는 역방향 반복자에서 순방향 연산이 필요할 때 유용하게 사용된
객체를 값으로 전달하면 복사 생성자가 호출되어 객체의 복사본 생성객체가 클수록 복사 비용이 증가하므로 참조(&)로 전달해서 복사를 피함const를 추가하면 함수 내에서 객체를 수정할 수 없도록 보장이는 데이터 무결성을 유지하고, 의도치 않은 변경을 방지하는 데 유용
객체지향 프로그래밍(OOP)에서 유지보수성과 확장성을 높이기 위해 따라야 할 5가지 설계 원칙이다. 각 원칙은 소프트웨어의 가독성, 유연성, 재사용성을 강화하는 데 목적이 있다.하나의 클래스는 하나의 책임만 가져야 한다.목적: 클래스가 하나의 역할만 담당하도록 설계해서
추가로 버퍼를 비우는(flush) 작업을 수행해서 줄바꿈한다.버퍼를 비운다는 것은 출력 버퍼에 쌓여 있는 데이터를 즉시 출력 장치(콘솔)로 내보내는 작업을 의미한다.\\n은 단순히 줄바꿈만 수행한다.버퍼를 비우지 않기 때문에, endl보다 더 효율적이다.출력 버퍼를 즉
std::inner_product()는 두 개의 범위를 이용해 내적(inner product)을 계산한다. <numeric> 헤더에 포함되어 있으며, 이 함수는 두 범위의 각 원소를 곱한 뒤 그 합을 계산하는 데 유용하며, 벡터 내적을 구할 때 자주 사용된다.fi
std::copy_if()는 <algorithm> 헤더에 포함된 함수로, 주어진 조건을 만족하는 원소만 선택하여 다른 범위로 복사하는 데 사용된다. 일반적인 복사 작업을 수행하는 std::copy()와 달리, 특정 조건을 만족하는 경우에만 원소를 복사한다는 특징이
strstr()는 <cstring> 헤더에 포함된 함수로, 문자열을 처리할 때, 특정 문자열이 다른 문자열에 포함되어 있는지를 확인할 때 strstr() 함수를 사용한다. 이 함수는 C 스타일 문자열(null-terminated string)에서 부분 문자열(su
std::string::rfind()는 문자열 내에서 뒤쪽부터(오른쪽에서 왼쪽으로) 특정 문자열이나 문자, 또는 부분 문자열을 찾는 함수다. 이 함수는 마지막으로 나타나는 위치를 찾을 때 유용하게 사용할 수 있다.첫 번째 매개변수: 찾고자 하는 문자열 또는 문자두 번째
reverse() 함수는 <algorithm> 헤더에 포함된 함수로, 주어진 범위의 요소들을 뒤집어 순서를 바꾸는 데 사용된다.first : 뒤집고자 하는 범위의 시작 위치를 가리키는 반복자last : 뒤집고자 하는 범위의 끝 위치 바로 다음을 가리키는 반복자re
insert() 함수는 다양한 STL 컨테이너(벡터, 리스트, 문자열, 맵, 셋 등)에서 새로운 요소를 삽입할 수 있다. 각 컨테이너에 따라 동작 방식과 삽입 위치가 달라지며, 오버로드된 여러 버전의 insert() 함수가 존재한다.pos : 삽입할 위치를 가리키는 반
front()와 back() 함수는 STL 컨테이너(벡터, 리스트, 데크, 문자열 등)에서 첫 번째 요소와 마지막 요소에 접근할 때 사용하는 함수다. 두 함수 모두 상수 시간 O(1)에 동작하며, 직접 인덱스를 사용할 필요 없이 직관적으로 가장 앞과 뒤의 요소를 참조할
multiset은 STL 컨테이너로, 중복된 값을 허용하면서 자동으로 정렬된 상태를 유지하는 데이터 구조다.이는 일반적인 set과 달리 동일한 값을 여러 번 저장할 수 있다.중복 허용: 같은 값을 여러 번 저장할 수 있다.자동 정렬: 삽입할 때 자동으로 오름차순(기본
cin으로 숫자를 입력받을 때 문자를 입력하면 cin이 실패 상태가 되며, 이 상태를 처리하지 않으면 프로그램이 무한루프에 빠질 수 있다. 이를 방지하기 위해 cin.fail()로 입력 실패 여부를 체크하고, cin.clear()와 cin.ignore()를 통해 오류
빈 입력에 대한 예외 처리는 getline()을 사용하여 문자열 길이를 체크하는 방식이 가장 확실하다.cin을 사용할 경우 입력 실패 상태(cin.fail())를 확인하고 스트림을 초기화(cin.clear())한 뒤, 남아 있는 입력을 무시(cin.ignore())하는
예외(Exception)는 프로그램 실행 중에 발생할 수 있는 예기치 못한 오류나 비정상적인 상황을 의미한다. 예외 처리는 이러한 상황이 발생했을 때 프로그램이 비정상 종료되지 않도록 적절히 처리하는 방법을 제공하는 것이다.try-catch 블록을 사용하여 구현한다.예
unordered_set은 해시 기반 데이터 구조를 사용해서 데이터를 저장하고 검색하는 컨테이너다. 데이터의 중복을 방지하면서 빠르게 삽입, 삭제, 검색할 수 있는 기능을 제공한다. unordered_set은 해시 테이블을 사용해서 데이터를 저장한다. 각 요소는 해
std::unique는 인접한 중복 요소를 제거하는 함수다.이 함수는 컨테이너 내에서 인접한 요소가 같을 경우 하나로 묶고, 중복을 제거한 새로운 순서를 반환한다.컨테이너 자체를 수정하지 않고, 중복되지 않은 마지막 요소의 위치를 반환한다.예시출력std::unique는
이 생성자는 주어진 문자 ch를 count만큼 반복하여 문자열을 초기화한다.예를 들어, std::string str(5, 'a');는 "aaaaa"라는 문자열을 생성한다.예시출력
count_if는 <algorithm> 헤더에 포함된 함수로, 특정 조건을 만족하는 요소의 개수를 계산할 때 사용된다. 매개변수:first : 탐색을 시작할 반복자last : 탐색을 종료할 반복자pred : 조건을 정의하는 함수 또는 람다 표현식반환값:조건을 만족
fill 함수는 지정된 범위에 있는 요소들을 특정 값으로 채우는 함수다.매개변수first: 채우기 시작할 반복자(포함)last: 채우기를 끝낼 반복자(미포함)value: 범위를 채울 값동작(first, last) 범위에 있는 모든 요소를 value로 채운다.출력 결과:
std::next()는 <iterator> 헤더에 정의된 함수로, 주어진 이터레이터(iterator)를 원하는 횟수만큼 앞으로 이동한 새 이터레이터를 반환해준다. 함수 원형 x : 이동할 기준이 되는 이터레이터n : 이동할 거리(기본값 1)반환값 n만큼 이동된
stringstream은 입출력(std::ios::in | std::ios::out)이 모두 가능한 문자열 스트림 클래스다. 즉, stringstream 객체를 사용하면 문자열을 읽고 쓰는 작업을 동시에 수행할 수 있다.stringstream 객체는 입력 및 출력이 모
std::getline() 함수는 특정 구분자를 기준으로 문자열을 추출하는 함수다. 기본적으로 개행 문자('\\n')를 기준으로 동작하지만, 원하는 구분자를 설정할 수도 있다.✅ 공백을 기준으로 문자열을 분리✅ 연속된 공백도 빈 문자열로 처리 가능✅ 사용자가 직접 구분
이 방법은 가장 기본적인 방법으로, 10진수를 2로 계속 나누면서 나머지를 저장한 후, 역순으로 출력하는 방식이다. 10을 변환하는 과정:1\. 10 ÷ 2 = 5, 나머지 02\. 5 ÷ 2 = 2, 나머지 13\. 2 ÷ 2 = 1, 나머지 04\. 1 ÷ 2 =
find_first_not_of(n) 함수는 문자열에서 n이 처음으로 아닌 문자가 등장하는 위치를 찾는 함수다.chars (문자열) → 찾고자 하는 제외할 문자들 (예: "0" → '0'이 아닌 첫 번째 문자를 찾음)ch (문자) → 특정 문자 하나만 제외 (예: '0