프로그래밍 언어
-
싱글턴 패턴 적용프로그래밍 언어/C++ 2024. 8. 21. 19:48
프로그램을 개발하다 보면 예상치 못한 동작이 발생하여 프로그램 에러가 발생하게 된다이러한 부작용을 줄이기 위한 다양한 방법이 있지만 이 글에서는 싱글턴 패턴을 사용한 방법을 포스팅한다 싱글턴 패턴은 말 그대로 '어플리케이션에서 특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장하는 디자인 패턴' 이다c++에서 아래와 같이 구현할 수 있다class noncopyable{ public: noncopyable(const noncopyable&) = delete; void operator=(const noncopyable&) = delete; protected: noncopyable() = default; ~noncopyable() = default;}; 복사생성과 '='를 통한 대입연산을 delete..
-
std::count_if프로그래밍 언어/C++ 2024. 7. 23. 16:07
std::count_if는 C++ 표준 라이브러리의 헤더에 정의된 함수 템플릿입니다. 이 함수는 범위 내에서 특정 조건을 만족하는 요소의 개수를 세는 데 사용됩니다. std::count_if는 조건을 지정하는 데 사용하는 함수 또는 함수 객체를 매개변수로 받아들입니다. 사용 사례:#include #include #include int main() { std::vector vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 짝수의 개수를 세기 위한 람다 함수 auto is_even = [](int n) { return n % 2 == 0; }; // std::count_if를 사용하여 조건을 만족하는 요소의 개수를 셈 int count = std::cou..
-
사용자 정의 리터럴(literal)프로그래밍 언어/C++ 2024. 7. 23. 16:03
C++ 표준 라이브러리에는 사용자 정의 리터럴(user-defined literals)을 정의할 수 있는 기능이 존재특정 형식의 값을 쉽게 생성할 수 있도록 도와줌 사용자 정의 리터럴의 기본 사용법사용자 정의 리터럴을 정의하려면 operator""을 사용합니다. 예를 들어, 길이를 나타내는 meter와 kilometer 리터럴을 정의할 수 있습니다.#include class Length {public: explicit Length(long double value) : value_(value) {} long double getValue() const { return value_; }private: long double value_;};Length operator"" _m(long doubl..
-
std::tie프로그래밍 언어/C++ 2024. 7. 23. 15:44
여러 변수를 묶어 하나의 튜플로 반환하는 기능을 제공주로 여러 변수에 대한 참조를 한 번에 설정하거나, 함수의 반환값을 다중 변수에 분해할 때 사용됨C++11에서 도입 사용사례:#include #include std::tuple getValues() { return {42, 3.14, "hello"};}int main() { int i; double d; std::string s; std::tie(i, d, s) = getValues(); std::cout 함수에서 여러 값을 반환할 때 std::tie를 사용하면 쉽게 값을 분해 가능 값을 무시하기반환값 중 일부를 무시하고 싶을 때 _와 같은 명명된 무시 변수를 사용할 수 있음C++17의 구조화된 바인딩과 달리, std::..
-
C++17 구조화된 바인딩(structured bindings)프로그래밍 언어/C++ 2024. 7. 23. 15:38
변수 선언 시에 배열, 튜플, 구조체 등 복합 데이터 구조의 요소를 개별 변수에 쉽게 할당할 수 있도록 합니다.이를 통해 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 구조화된 바인딩의 사용 예: 배열#include #include int main() { std::array arr = {1, 2, 3}; auto [x, y, z] = arr; std::cout 튜플#include #include std::tuple getTuple() { return {1, 3.14, "Hello"};}int main() { auto [a, b, c] = getTuple(); std::cout 구조체#include #include struct Person { std::str..
-
생성자 이니셜라이저(initializer list)프로그래밍 언어/C++ 2024. 7. 23. 15:34
클래스의 멤버 변수를 초기화하는 특별한 구문생성자 이니셜라이저는 생성자의 본문이 실행되기 전에 멤버 변수를 초기화하는 데 사용이를 통해 멤버 변수를 생성과 동시에 초기화 #include #include class Person {private: std::string name; int age;public: // 생성자 이니셜라이저를 사용한 생성자 Person(const std::string& n, int a) : name(n), age(a) {} void display() const { std::cout 위 예제에서 Person 클래스의 생성자는 이니셜라이저 리스트를 사용하여 name과 age 멤버 변수를 초기화 성능 향상: 멤버 변수를 생성자 본문에서 할당하는 것보..
-
std::signal프로그래밍 언어/C++ 2024. 7. 16. 09:55
std::signal 함수는 C++ 표준 라이브러리에서 제공하는 함수로, 특정 신호(signal)가 발생했을 때 호출될 신호 처리기(signal handler)를 설정하는 데 사용됩니다. 이 함수는 C 라이브러리의 signal 함수와 동일한 기능 #include void ( *signal (int sig, void(*func)(int)) )(int); 매개변수sig: 설정할 신호의 종류를 나타내는 정수 값입니다. 표준 신호로는 SIGINT, SIGTERM, SIGKILL, SIGSEGV 등이 있습니다.handler: 신호가 발생했을 때 호출될 함수의 포인터입니다. 이 함수는 정수형 매개변수를 하나 가지며, 해당 매개변수는 발생한 신호를 나타냅니다.반환값이전에 설정된 신호 처리기의 포인터를 반환합니다. 만..
-
std::bind(), std::function(), std::placeholder프로그래밍 언어/C++ 2023. 12. 28. 18:18
std::bind(), std::function()은 callable에 대한 이야기이다. "callable"은 호출 가능한 객체 또는 표현식이다. 즉, 함수처럼 호출할 수 있는 객체를 말한다. std::function 함수를 통해 기존에 정의된 함수, 클래스의 멤버로 정의된 멤버함수, 람다 함수를 변수화하여 정의할 수 있다.예제 코드 std::function을 주로 사용하는 이유는 callback 함수 처리에 대한 유용성이 뛰어나기 때문입니다. 동일 함수의 시그니처를 container를 통해 관리할 수 있습니다. std::bind 함수는 이미 정의된 함수를 재정의하여 사용할 수 있습니다. std::bind는 std::placehoders를 인풋 파라미터로 정의하여 추후 자유롭게 파라미터를 설정할 수도..