본문 바로가기

개발104

Modern C++ : Custom Iterator Utilities (98, 11, 17, 20) Custom Iterator Utilities in C++ 개요이 문서는 C++ 표준 라이브러리의 반복자 유틸리티 함수들을 직접 구현한 예제를 다룹니다. advance, distance, next, prev 함수들을 구현하여 반복자의 동작 방식을 이해하고, 이를 활용하는 방법을 설명합니다. C++ 버전별 주요 키워드 도입 시기C++98: 기본 반복자 유틸리티 도입C++11: std::next(), std::prev() 함수 추가C++17: std::size()와 같은 반복자 관련 유틸리티 추가C++20: std::ranges와 함께 개선된 반복자 지원 내용 설명구현된 타입과 함수들DifferenceType반복자 간의 거리를 표현하는 정수 타입입니다.실제 정의: using DifferenceType = I.. 2025. 8. 29.
Modern C++ : std::inserter (98, 11, 17) std::inserter 개요std::inserter는 C++ 표준 라이브러리의 반복자 어댑터로, 알고리즘이 컨테이너의 특정 위치에 요소를 삽입할 수 있게 해주는 삽입 반복자(insert iterator)를 생성합니다. 이는 표준 알고리즘들이 기존 요소를 덮어쓰는 대신 컨테이너에 새 요소를 삽입할 수 있게 해줍니다. C++ 버전별 주요 키워드 도입 시기C++98: 최초 도입C++11: 우측값 참조와 이동 의미론 지원C++17: insert_iterator에 대한 CTAD(Class Template Argument Deduction) 지원 내용 설명std::inserter는 두 개의 인자를 받는 함수 템플릿입니다:컨테이너: 요소가 삽입될 컨테이너위치: 삽입이 발생할 위치를 가리키는 반복자std::inser.. 2025. 8. 28.
Modern C++ : iterators (98, 11, 17, 20) Iterators in C++ 개요Iterator는 C++ STL(Standard Template Library)에서 컨테이너의 요소들을 순회하고 접근하기 위한 추상화된 방법을 제공하는 객체입니다. 포인터와 유사한 동작을 하지만, 컨테이너의 내부 구현을 캡슐화하여 일관된 인터페이스를 제공합니다. C++ 버전별 주요 키워드 도입 시기C++98: 기본 반복자 개념 도입C++11: cbegin(), cend(), crbegin(), crend() 추가C++17: std::size(), std::empty(), std::data() 등 반복자 관련 유틸리티 추가C++20: std::ranges 도입으로 더 나은 반복자 지원 내용 설명반복자 카테고리입력 반복자 (Input Iterator): 읽기 전용, 순방향 .. 2025. 8. 27.
Modern C++ : type aliases (typedef and using) (98, 11) C++ Type Aliases (typedef and using) 개요타입 별칭(Type Alias)은 C++에서 기존 타입에 대한 대체 이름을 정의하는 방법입니다. 이를 통해 코드의 가독성을 높이고 복잡한 타입 선언을 단순화할 수 있습니다. C++ 버전별 주요 키워드 도입 시기typedef: C++98/03부터 사용 가능 (C 언어에서 상속)using (type alias): C++11부터 도입Alias templates: C++11부터 도입 내용 설명1. typedef (C 스타일)C 언어에서 물려받은 전통적인 타입 별칭 방식입니다.typedef std::vector ByteVector1; 2. using (C++11 스타일)C++11에서 도입된 더 직관적인 문법입니다.using ByteVector2.. 2025. 8. 26.
Modern C++ : std::map (98, 11, 17, 20) std::map 개요std::map은 C++ 표준 라이브러리의 연관 컨테이너로, 키-값 쌍을 저장하고 관리합니다. 이진 탐색 트리(BST) 기반으로 구현되어 있으며, 키를 기준으로 자동으로 정렬됩니다. 각 키는 유일해야 하며, 삽입/삭제/검색 연산이 O(log n)의 시간 복잡도를 가집니다. C++ 버전별 주요 키워드 도입 시기C++98: 기본 std::map 도입C++11: emplace, cbegin(), cend(), 범위 기반 for 루프 지원C++17: extract, insert_or_assign, try_emplace, merge 메서드 추가C++20: contains 메서드 추가 (C++20 이전에는 find와 end() 비교로 대체) 내용 설명std::map은 다음과 같은 주요 특징을 가.. 2025. 8. 25.
Modern C++ : std::pair, std::tuple (98, 11, 17) std::pair와 std::tuple 개요std::pair와 std::tuple은 C++ 표준 라이브러리에서 제공하는 유틸리티 클래스로, 여러 값을 하나의 단위로 묶어서 다룰 수 있게 해줍니다. 주로 함수에서 여러 값을 반환하거나, 여러 값을 한 번에 전달해야 할 때 유용하게 사용됩니다. C++ 버전별 주요 키워드 도입 시기std::pair: C++98/03부터 도입std::tuple: C++11에서 도입구조화된 바인딩(Structured Binding): C++17에서 도입 내용 설명std::pair두 개의 서로 다른 타입의 값을 하나의 단위로 저장할 수 있는 클래스 템플릿first와 second라는 두 개의 공개 멤버 변수를 가짐비교 연산자(==, !=, , , >, >=)가 오버로딩되어 있음 st.. 2025. 8. 24.
Modern C++ : std::span (20) std::span 개요std::span은 연속된 메모리 영역을 참조하는 가볍고 안전한 래퍼 클래스입니다. C++20에서 도입되었으며, 배열이나 컨테이너의 요소들에 대한 뷰를 제공합니다. 포인터와 크기 쌍을 추상화하여 더 안전하고 표현력 있는 코드를 작성할 수 있게 해줍니다. C++ 버전별 주요 키워드 도입 시기C++20: std::span 도입 내용 설명std::span의 주요 특징:가벼운 참조 타입: std::span은 데이터를 소유하지 않고, 기존 데이터에 대한 뷰만 제공합니다.연속 메모리 컨테이너와 호환: std::vector, std::array, C-style 배열 등과 함께 사용할 수 있습니다.런타임 크기 정보: 배열의 크기를 런타임에 알 수 있습니다.범위 기반 for 루프 지원: 표준 컨테이.. 2025. 8. 23.
Modern C++ : std::vector, emplace_back vs push_back (98, 11, 17) C++ vector의 emplace_back vs push_back 개요std::vector에서 emplace_back과 push_back은 모두 컨테이너의 끝에 요소를 추가하는 멤버 함수입니다. 이 두 함수는 비슷해 보이지만 내부 동작 방식에서 중요한 차이점이 있습니다. emplace_back은 C++11에서 도입된 기능으로, 불필요한 복사나 이동 연산을 피하고 직접 객체를 생성할 수 있게 해줍니다. C++ 버전별 주요 키워드 도입 시기C++98/03: push_back()만 사용 가능C++11: emplace_back() 도입, 완벽한 전달(perfect forwarding) 지원C++17: emplace_back()이 참조를 반환하도록 변경 내용 설명push_back의 동작 방식전달된 인자로 임시 .. 2025. 8. 22.
Modern C++ : std::vector (98, 11, 14, 17, 20) C++ std::vector 컨테이너 개요std::vector는 C++ 표준 라이브러리에서 제공하는 동적 배열 컨테이너로, 연속된 메모리 공간에 요소를 저장합니다. 자동으로 메모리를 관리하고 크기를 동적으로 조정할 수 있어 가장 널리 사용되는 컨테이너 중 하나입니다. 임의 접근이 가능하고, 끝에서의 삽입/삭제가 효율적입니다. C++ 버전별 주요 키워드 도입 시기C++98/03: 기본 std::vector 기능 도입C++11: 이동 생성자/대입 연산자, emplace_back(), shrink_to_fit()C++14: 일반화된 람다 캡처와 함께 사용 개선C++17: 구조적 바인딩과 함께 사용 개선, emplace_back()이 참조 반환C++20: std::span과의 호환성, std::ranges 지원.. 2025. 8. 21.