블로그
-
C++17 optional·variant·any: nullptr 체크 대신 타입으로 표현하기
값이 없을 수 있는 결과는 nullptr 대신 std::optional로, 여러 타입 중 하나는 std::variant와 std::visit으로, 임의 타입은 std::any로 표현하는 방법을 비교합니다. 빈 optional 접근, 잘못된 get·any_cast 같은 흔한 실수도 짚습니다.
-
C++ 람다 표현식: 캡처·mutable·제네릭 람다부터 deducing this 재귀까지
[=]·[&]·초기화 캡처·this 캡처가 각각 무엇을 복사하고 무엇을 참조하는지, mutable과 제네릭·템플릿 람다, IIFE, 재귀 람다(std::function·Y-combinator·C++23 deducing this), constexpr/consteval 람다까지 한 글에서 다룹니다. 댕글링 참조, for 루프 변수 캡처, this 캡처 후 객체 소멸 같은 오류와 std::function에 담을 때의 비용도 설명합니다.
-
std::vector 제대로 쓰기: 초기화 방법, capacity와 성장 배율, reserve·emplace_back 성능
C++ std::vector 정리. 초기화 방법, 주요 연산, capacity와 성장 배율(growth factor), reserve와 emplace_back의 성능 차이, 반복자 무효화 같은 자주 나는 에러를 예제로 다룹니다.
-
C++ std::function | 콜백·전략 패턴과 함수 객체
버튼 클릭 핸들러처럼 실행할 함수를 변수에 담아야 할 때 std::function으로 일반 함수·람다·멤버 함수·함수 객체를 저장하는 방법을 다룹니다. 상태를 가진 functor, std::bind와 람다 비교, 전략·명령 패턴 구현, 빈 function 호출과 dangling 캡처 오류도 설명합니다.
-
C++ 컨테이너 선택 가이드 | vector/list/deque/map/set 상황별 선택과 성능 최적화
앞쪽 삽입을 반복하다 시간 초과가 나는 경우처럼 컨테이너를 잘못 고른 상황에서 출발해 vector·deque·list와 map·set·unordered 계열을 연산 복잡도와 메모리 배치로 비교합니다. BFS·LRU 캐시 예제와 반복자 무효화, 해시 미정의 에러도 다룹니다.
-
C++ STL 알고리즘 기초: sort·find·transform·accumulate 실전 활용
for문으로 직접 짠 정렬·검색·집계에서 버그가 나는 상황을 std::sort, find_if, count_if, transform, accumulate로 바꾸는 방법을 보여줍니다. remove 후 erase 누락, accumulate 초기값 실수, 비교자 규칙 위반도 짚습니다.
-
C++ Move Semantics | std::move로 불필요한 복사 제거하고 성능 최적화
큰 vector를 반환할 때의 복사 비용에서 출발해 lvalue·rvalue 구분, rvalue 참조, 이동 생성자와 이동 대입, Rule of Five를 예제로 구현합니다. return std::move가 RVO를 막는 경우, noexcept 누락, const 객체에 move를 거는 실수도 다룹니다.
-
C++ STL 고급 알고리즘: partition·merge·집합 연산·힙 연산 쓰는 법과 흔한 실수
partition과 stable_partition으로 조건 분할하기, 정렬된 두 범위를 merge와 set_union·set_intersection으로 합치고 교집합 구하기, make_heap·push_heap으로 우선순위 큐를 직접 다루는 법을 예제로 정리하고, 정렬되지 않은 입력을 넘기는 실수 같은 함정을 짚습니다.
-
래퍼 함수에서 인자가 복사될 때: 유니버설 참조와 std::forward로 완벽한 전달 구현하기
C++ 완벽한 전달(Perfect Forwarding) 정리. 래퍼 함수에서 인자가 복사되는 문제, 유니버설 참조, std::forward, 참조 축약 규칙, emplace 계열 함수와 성능 비교를 다룹니다.
-
C++ 프로파일링: perf·Tracy·VTune 도구 비교와 병목 찾는 절차
추측으로 최적화하다 시간을 날리지 않도록 std::chrono 측정에서 시작해 perf, gprof, Callgrind, Tracy, VTune 같은 도구로 핫스팟을 찾는 절차를 보여줍니다. Flame Graph 생성, 측정과 재측정을 반복하는 흐름, 벤치마크할 때 빠지기 쉬운 함정도 다룹니다.