블로그
-
C++ min·max·minmax_element와 std::clamp: 값 비교와 범위 제한
두 값 비교용 std::min·max·minmax와 범위용 min_element·max_element·minmax_element의 차이, 커스텀 비교자, C++17 std::clamp로 마우스 좌표를 화면 안으로 제한하는 예제와 통계·정규화 패턴을 다룹니다.
-
C++ <numeric> 알고리즘: accumulate·reduce·scan의 차이와 함정
<numeric>의 accumulate와 C++17 reduce·transform_reduce의 차이, inner_product, partial_sum과 inclusive·exclusive_scan, adjacent_difference, iota를 통계·복리 이자·이동 평균 계산 예제로 설명합니다.
-
C++ partition·stable_partition·partition_point: 조건으로 범위 나누기
std::partition으로 조건에 맞는 요소를 앞쪽으로 모으고, 상대 순서를 지키는 stable_partition과 비교하며, 분할된 범위에서 partition_point로 경계를 이진 탐색하는 방법과 3-way 분할, 퀵 정렬 한 단계 스케치를 다룹니다.
-
C++ next_permutation으로 순열·조합 만들기: 정렬 후 do-while 패턴
next_permutation과 prev_permutation으로 사전순 순열을 만드는 방법을 설명하고, 정렬부터 하고 do-while로 돌리는 패턴, 문자열 순열, n개 중 k개 순열과 조합 생성, 완전 탐색에 적용하는 예제를 다룹니다.
-
C++ 알고리즘 문제풀이 | 코딩테스트 필수 문제 10선
Two Sum, 이진 탐색, 최대 부분 배열 합, 동전 거스름돈, 섬의 개수, 유효한 괄호, LIS, 0/1 배낭, 다익스트라, 순열·조합까지 코딩테스트 단골 10문제를 C++ STL 풀이와 시간복잡도 분석으로 풀어 봅니다.
-
C++ remove·remove_if가 원소를 지우지 않는 이유: erase-remove와 C++20 erase_if
std::remove와 remove_if가 실제로 요소를 지우지 않고 뒤로 밀어 내기만 하는 이유를 설명하고, erase-remove 관용구, 정렬 후 unique로 중복 제거하는 방법, C++20 std::erase·erase_if로 간결하게 쓰는 법을 다룹니다.
-
C++ Adapter 패턴: 객체 어댑터 vs 클래스 어댑터로 레거시·외부 API 감싸기
C++에서 호환되지 않는 인터페이스를 연결하는 Adapter 패턴을 조합 방식의 객체 어댑터와 다중 상속 방식의 클래스 어댑터로 구현해 비교하고, 레거시 API 감싸기, 팩토리·템플릿 어댑터, 결제 시스템 예제를 다룹니다.
-
C++ ADL(인자 종속 조회): swap 관용구가 동작하는 이유와 엉뚱한 함수가 호출될 때
네임스페이스 한정 없이 호출한 함수가 인자 타입의 네임스페이스에서 검색되는 ADL 규칙을 std::cout, 연산자 오버로딩, swap 관용구, 직렬화 예제로 설명하고, 의도치 않은 함수가 선택되는 문제와 막는 방법을 다룹니다.
-
C++ 디버깅 실전: GDB·LLDB watchpoint와 코어 덤프, ASan·TSan·UBSan, 메모리 누수·데드락, 프로덕션 크래시 추적
C++ 버그를 재현하고 좁혀 가는 방법. GDB/LLDB 고급 기법(watchpoint, 조건부 브레이크포인트, 코어 덤프, 멀티스레드), ASan·TSan·UBSan·MSan과 Valgrind, 메모리 누수·데드락·반복자 무효화 추적, 구조화 로깅과 크래시 리포터까지 실전 시나리오로 정리합니다.
-
C++ 보안 프로그래밍 | 메모리 안전·인젝션·하드닝
할당 크기 정수 오버플로우로 생기는 힙 손상, 스마트 포인터로도 막지 못하는 댕글링(string_view·span·반복자 무효화), SQL·명령어·포맷 스트링 인젝션, 민감 메모리 제로화, 표준 라이브러리 하드닝 모드와 컴파일러 보호 옵션, Sanitizer·퍼징까지 C++ 메모리 안전 중심으로 다룹니다.