본문 바로가기

전체 보기196

Modern C++ : std::filesystem std::filesystem 개요std::filesystem은 C++17에서 도입된 파일 시스템 라이브러리로, 파일과 디렉토리 조작을 위한 다양한 기능을 제공합니다. 이 라이브러리는 플랫폼 독립적인 방식으로 파일 시스템을 다룰 수 있게 해주며, 경로 조작, 파일 속성 조회, 디렉토리 순회 등의 작업을 수행할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++17: std::filesystem 네임스페이스와 주요 클래스들(path, directory_iterator 등)이 표준 라이브러리에 추가C++20: std::filesystem::path에 operator (three-way comparison) 추가 내용 설명std::filesystem은 다음과 같은 주요 기능을 제공합니다:경로 조작: pat.. 2025. 9. 3.
Modern C++ : std::ostream & std::istream (98, 11, 17, 20) std::ostream & std::istream 개요std::ostream과 std::istream은 C++ 표준 라이브러리에서 제공하는 입출력 스트림 클래스로, 각각 출력과 입력을 담당합니다. 이들은 형식화된 입출력과 형식화되지 않은 입출력 모두를 지원하며, 파일, 메모리 버퍼, 표준 입출력 등 다양한 소스/대상과 연동할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98: 기본 std::ostream, std::istream 클래스 도입C++11: 이동 생성자/대입 연산자 추가, noexcept 지정자 추가C++17: std::byte 지원 추가C++20: std::format과의 통합, synchronized_ 접두사 출력 함수 추가 내용 설명std::ostream과 std::istrea.. 2025. 9. 2.
Modern C++ : std::string_view (17, 20) std::string_view 개요std::string_view는 C++17에서 도입된 문자열 뷰 클래스로, 문자열 데이터에 대한 읽기 전용 뷰를 제공합니다. 메모리 할당 없이 문자열을 참조할 수 있어 성능이 중요한 상황에서 유용하게 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++17: std::string_view가 표준 라이브러리에 추가됨C++20: std::string_view에 starts_with(), ends_with() 등의 편의 함수 추가 내용 설명std::string_view는 다음과 같은 특징을 가집니다:메모리 할당 없음: 문자열 데이터를 소유하지 않고 참조만 함가볍고 빠름: std::string보다 가볍고 복사 비용이 저렴유효성 주의: 참조하는 문자열의 수명이 string_vi.. 2025. 9. 1.
Modern C++ : Small String Optimization (SSO) Small String Optimization (SSO) 개요Small String Optimization(SSO)은 std::string 클래스에서 짧은 문자열을 저장할 때 힙 할당을 피하고 스택 메모리를 활용하여 성능을 최적화하는 기법입니다. 이 기법은 문자열의 길이가 특정 임계값(SSO capacity) 이내일 때 적용됩니다. C++ 버전별 주요 키워드 도입 시기C++98: std::string의 구현 세부사항으로 SSO가 도입되기 시작 (표준화된 사양은 아님)C++11: 이동 생성자/대입 연산자와 함께 SSO 최적화가 더욱 중요해짐C++17: std::string_view 도입으로 SSO와 함께 사용할 때의 최적화 기회 증가 내용 설명SSO는 짧은 문자열을 다룰 때 다음과 같은 이점을 제공합니다:.. 2025. 8. 31.
Modern C++ : std::string (98, 11, 17, 20) std::string 개요std::string은 C++ 표준 라이브러리에서 제공하는 문자열 클래스로, 문자열 조작을 위한 다양한 기능을 제공합니다. 메모리 관리를 자동으로 처리하며, 안전하고 편리한 문자열 처리가 가능합니다. C++ 버전별 주요 키워드 도입 시기C++98: 기본 std::string 클래스 도입C++11: 이동 생성자/대입 연산자, shrink_to_fit() 등 추가C++17: string_view와의 상호작용 추가, 비멤버 std::size() 등 추가C++20: starts_with(), ends_with() 메서드 추가 내용 설명std::string은 다음과 같은 주요 특징을 가집니다:동적 메모리 관리: 문자열 길이에 따라 자동으로 메모리 할당/해제문자열 조작: 다양한 멤버 함수를.. 2025. 8. 30.
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.