C++
-
[C++] namespace 의미와 class 간 차이C++/C++ 기초 2025. 11. 23. 15:13
namespace 란?c++에서 namespace는 이름 충돌을 방지하기 위한 이름 공간이다. 프로그램이 커지는 경우, 함수 이름 또는 전역 변수 이름이 겹치는 문제가 발생할 수 있다. namespace로 감쌀 경우, 충돌을 피할 수 있다. #include using namespace std;namespace MySpace { int number = 10; void print() { cout 위 코드에서 변수 number, 함수 print()는 namespace인 Myspace 내에 선언되어 있다. 그리고 Myspace내 함수와 변수를 쓰기 위해서 Myspace::를 붙여 접근할 수 있다. 예시 코드를 실행할 경우 아래와 같이 출력된다.10MySpace::print() 호출! 같..
-
[C++] 스마트 포인터 활용하기C++/C++ 실습 2025. 6. 1. 11:22
스마트 포인터란?C++에서 스마트 포인터 (Smart Pointer)는 동적 메모리 관리를 자동화해주는 클래스를 의미한다. 기존 new, delete를 통해 동적 메모리 할당을 하던 방식에서 발전된 형태라고 볼 수 있다. 가장 큰 장점으로는 메모리 해제 (delete)를 하지 않더라도 자동적으로 메모리를 해제한다는 점이다. 스마트 포인터 종류스마트 포인터설명std::unique_ptr단독 소유 포인터이며, 다른 포인터로 복사가 불가능하다. 이동은 가능하다.std::make_uniqure 함수를 통해 생성할 수 있다. (C++ 14이상부터 가능하며, C++ 11에서는 직접 new 함수를 써야된다.)std::shared_ptr여러 포인터가 같은 자원을 공유한다. 마지막 포인터가 삭제될 때 자원이 해제된다...
-
[C++] 람다 함수 활용 방법 (Lambda Expression)C++/C++ 실습 2025. 5. 18. 22:17
람다 함수 (Lambda Expression) 정의람다 함수란 이름 없이 정의할 수 있는 익명의 함수를 의미한다. 코드 내에서 간단하게 함수를 정의하고 바로 사용할 수 있다. 그리고 STL (표준 템플릿 라이브러리)와 함께 유용하게 활용될 수 있다. 기본 문법은 다음과 같다.[capture_list] (parameters) -> return_type { // Function body}; capture_list: 외부 변수를 람다 내에서 사용할 수 있도록 캡쳐하는 부분이다. 람다 함수는 기본적으로 람다 함수가 선언된 영역의 변수를 활용할 수 있다.parameters: 함수의 인자 목록을 의미한다.return_type: 반환 타입이며, 생략 가능하다. 컴파일러가 추론할 수 있다.Function body..
-
[C++] STL 컨테이너 멤버 타입 특징C++/C++ STL 2024. 11. 16. 22:11
STL Container 정의STL (Standard Template Library) 컨테이너는 C++ 표준 템플릿 라이브러리에서 제공하는 자료 구조이며, 템플릿 클래스다. 데이터 구조를 효율적으로 사용하고 코드를 단순화하는데 필수적이다. 이를 이해한다면, 더 빠르고 안정적인 프로그램을 개발할 수 있다. STL 컨테이너는 데이터 저장방식과 성능 요구사항에 따라 다음과 같이 분류할 수 있다.- 빠른 임의 접근: std::vector, std::deque- 삽입/삭제가 빈번: std::list, std::forward_list- 정렬된 데이터: std::set, std::map- 빠른 검색:std::unordered_set, std::unordered_map- 특정 구조: std::stack, std::qu..
-
[C++] ADL (Argument Dependent Lookup) 이해하기C++/C++ 실습 2024. 11. 10. 08:55
ADL (Argument Dependent Lookup) 정의ADJ는 C++ 98부터 도입된 개념이며 함수 인자가 소속된 네임스페이스를 기준으로 함수를 자동으로 찾아 호출하게 해주는 기능이다. 자동으로 인자의 네임스페이스에서 탐색하여 함수를 찾게 해준다. 예제 코드:#include namespace MyNamespace { struct MyType {}; void myFunction(MyType) { std::cout 위 코드에서 MyNamespace 내 구조체인 MyType 형태로 obj를 정의했다. 그리고 MyNamespace 안의 함수인 myFunction에 함수 인자 obj를 넣을 경우, myFunction 함수에 추가적으로 네임스페이스를 명시하지 않더라도 자동으로 obj..
-
[C++] Concepts 의미와 사용 방법C++/C++ STL 2024. 9. 22. 10:03
Concepts 개요Concepts는 C++20 표준에 처음 등장하였다. 템플릿 프로그래밍에서 제약 조건을 정의하는 기능을 한다. 이를 통해 특정 요구사항을 충족하는지, 컴파일 도중에 확인할 수 있다. 이를 통해, 템플릿을 더 명확하고 안전하게 작성할 수 있도록 도와준다. Concepts 정의Concepts는 Concept 키워드를 사용하여 정의된다. 특정 타입이 특정 요구 사항을 충족하는지 확인하기 위한 boolean 함수와 비슷한 역할을 한다. // Concepts 정의 예제templateconcept EqualityComparable = requires(T a, T b){ {a == b} -> std::convertible_to;}; 위 예시에서 EqualityComparable이라는 Concept..
-
[c++] vector, map 라이브러리 사용법C++/C++ 알고리즘 2023. 12. 9. 13:25
vector와 map은 모두 정렬을 쉽고 유용하게 해주는 라이브러리이다. 특히 map은 기존의 배열변수에서 인풋값이 정수였던 한계를 넘어, 문자를 인풋값으로 활용할수도 있다. #include "pch.h"#include #include #include using namespace std;int main(){ vector products = { "alpa", "beta", "ceta", "delta" }; vector changes = { "beta", "ceta" }; vector answer; map m; //map 데이터 할당 for (int j = 0; j map 데이터 변경, Products 데이터 변경 for (int i = 0; i 결과: Products는 제품이름의 나열이며, ..