Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++

  1. C++ rint(), rintf(), rintl() 함수로 부동소수점 값 반올림하기

    C++에서는 부동소수점 값을 반올림된 정수 형태로 변환할 때 사용할 수 있는 세 가지 함수가 제공됩니다. 바로 rint(), rintf(), rintl()입니다. 이 세 함수는 이름과 다루는 자료형만 다를 뿐 기본적인 동작 방식은 동일하며, <cmath> 헤더에 선언되어 있습니다.rint() 함수rint() 함수는 부동소수점 값을 정수로 반올림하는 데 사용됩니다. 이 함수는 현재 설정된 반올림 모드(current rounding mode)에 따라 결과가 결정되며, 별도로 설정하지 않으면 기본적으로 가장 가까운 짝수로 반올

  2. C++로 만드는 매트릭스 효과: 화면에 떨어지는 문자 구현하기

    영화 <매트릭스>를 비롯한 여러 영화에서 초록색 문자가 빗줄기처럼 화면을 타고 떨어지는 장면을 본 적이 있을 것입니다. 이번 글에서는 C++ 콘솔 프로그램으로 그와 같은 효과를 직접 구현하는 방법을 소개합니다. 이 문제를 해결하려면 다음 세 가지 요소를 고려해야 합니다. 화면 너비 정의: 문자가 흐르는 매트릭스 창의 가로 폭을 먼저 정합니다. 불규칙한 문자 배치: 인접한 두 문자 사이의 간격이 항상 동일하지 않도록 하여 자연스러운 느낌을 연출합니다. 출력 지연 추가: 한 줄을 출력할 때마다 일정 시간의 딜레이를 두어

  3. C++ std::regex_error 완벽 가이드 – 정규식 오류 종류와 예외 처리 방법

    std::regex_error란 무엇인가? C++의 <regex> 라이브러리는 정규 표현식(regular expression)과 관련된 다양한 메서드와 기능을 제공합니다. 정규 표현식을 컴파일하거나 실행하는 과정에서 문법 오류, 리소스 부족 등의 문제가 발생하면 std::regex_error 예외가 던져지며, 이 예외는 어떤 종류의 오류인지 식별할 수 있는 오류 코드(error flag)를 함께 가지고 있습니다. 아래 표는 regex 라이브러리에 정의된 주요 오류 플래그와 그 의미를 정리한 것입니다. regex_error

  4. C++ 버퍼 플러시(Buffer Flush)란 무엇일까? 개념부터 실전 예제까지

    버퍼 플러시(buffer flush)는 컴퓨터 데이터를 임시 저장 영역(버퍼)에서 영구 메모리나 출력 장치로 전송하는 작업을 말합니다. 예를 들어 파일의 내용을 수정할 때, 화면에 보이는 변경 사항은 곧바로 저장되는 것이 아니라 일단 버퍼라는 임시 공간에 먼저 저장됩니다.왜 버퍼 플러시가 필요한가?C++에서는 성능 향상을 위해 출력 데이터를 즉시 전송하지 않고 버퍼에 모아 두었다가 한 번에 처리합니다. 하지만 이 때문에 실시간으로 출력 결과를 확인해야 하는 상황에서는 버퍼가 비워지지 않아 화면에 아무것도 나타나지 않는 문제가 발생할

  5. C++에서 NaN(Not a Number)이란? 개념과 예제로 쉽게 이해하기

    NaN은 Not a Number의 약자로, 정의되지 않았거나 부동소수점 방식으로 표현할 수 없는 값을 나타내는 특수한 값입니다. 주로 수학적으로 유효하지 않은 연산의 결과로 발생하며, 대표적인 예로 음수의 제곱근을 구하는 경우나 0을 0으로 나누는(0/0) 연산이 있습니다. NaN이 발생하는 대표적인 경우 음수에 대한 제곱근 계산 (예: sqrt(-5)) 0 ÷ 0 과 같은 불확정 형태의 나눗셈 무한대에서 무한대를 빼는 연산 (∞ - ∞) 0에 무한대를 곱하는 연산 (0 × ∞) 예제 코드 다음은 C++에서 음수의 제곱근을 구했

  6. C++ transform() 함수 완벽 가이드 – 단항·이항 연산 모드와 활용 예제

    C++ transform() 함수란? transform() 함수는 C++ STL(표준 템플릿 라이브러리)에 포함된 알고리즘 함수로, 배열이나 컨테이너의 모든 요소에 특정 연산을 일괄 적용할 때 사용됩니다. 이 함수를 사용하려면 <algorithm> 헤더 파일을 반드시 포함해야 합니다. 예를 들어 배열의 각 요소를 제곱한 값을 다른 배열에 저장하고 싶다면, 반복문을 직접 작성하는 대신 transform() 함수 하나로 간결하게 처리할 수 있습니다. transform() 함수의 두 가지 동작 모드 transform() 함수

  7. C++ 객체 슬라이싱(Object Slicing) 완벽 정리: 개념부터 예제까지

    C++ 객체 슬라이싱(Object Slicing)이란? 객체 슬라이싱(Object Slicing)은 파생 클래스(자식 클래스)의 객체를 기반 클래스(부모 클래스)의 인스턴스에 할당할 때 발생하는 현상을 설명하는 용어입니다. 이 과정에서 파생 클래스에만 존재하는 메서드와 멤버 변수들이 사라지게 되는데, 마치 정보가 잘려나간 것처럼 표현된다고 하여 슬라이싱이라고 부릅니다. 다음 예제를 통해 살펴보겠습니다. class Foo {     int a; }; class Bar : public Foo { &n

  8. 부스트 라이브러리를 활용한 고급 C++ 프로그래밍

    C++ 부스트(Boost) 라이브러리는 다양한 분야에서 폭넓게 활용되는 강력한 오픈소스 라이브러리입니다. 특히 표준 C++ 타입만으로는 표현하기 어려운 매우 큰 숫자를 다룰 때 그 진가를 발휘합니다. 예를 들어 부스트를 사용하면 64비트를 훌쩍 넘는 거대한 정수도 C++에서 자유롭게 계산할 수 있습니다.이번 글에서는 부스트 라이브러리의 대표적인 기능인 다중 정밀도(multiprecision) 연산을 세 가지 예제를 통해 살펴보겠습니다.1. int128_t로 두 개의 거대한 수 곱하기부스트의 multiprecision 라이브러리는 i

  9. C++에서 객체 복사를 방지하는 방법 총정리

    C++에서는 클래스를 정의하면 컴파일러가 기본적으로 복사 생성자(copy constructor)와 복사 대입 연산자(copy assignment operator)를 자동으로 생성해 줍니다. 덕분에 객체를 손쉽게 복사할 수 있지만, 파일 핸들이나 동적 메모리처럼 리소스를 직접 관리하는 클래스, 혹은 싱글턴(Singleton) 패턴처럼 인스턴스가 하나만 존재해야 하는 클래스에서는 객체 복사가 오히려 버그의 원인이 될 수 있습니다.이번 글에서는 C++에서 객체 복사를 막는 대표적인 두 가지 방법을 예제 코드와 함께 살펴보겠습니다.방법 1

  10. C++ strtol() 함수 완벽 정리 – 문자열을 long 정수로 변환하는 방법

    C++의 strtol() 함수는 문자열(string)을 long 정수(long int)로 변환할 때 사용하는 함수입니다. 이 함수는 변환된 마지막 유효 문자 다음 위치를 가리키도록 포인터를 설정해 주기 때문에, 숫자 뒤에 붙어 있는 나머지 문자열도 쉽게 확인할 수 있습니다.strtol() 함수는 cstdlib 헤더 파일에 포함되어 있으며, 함수 원형은 다음과 같습니다.long int strtol(const char* str, char** end, int base)strtol() 함수의 매개변수이 함수는 세 개의 인자를 받습니다.st

  11. C++ remainder() 함수 완벽 가이드: 부동소수점 나머지 계산 방법

    C++ remainder() 함수란? C++의 remainder() 함수는 분자(numerator)를 분모(denominator)로 나눈 부동소수점 나머지를 계산하는 데 사용됩니다. 이 함수는 C 표준 라이브러리의 <cmath> 헤더에 정의되어 있으며, IEEE 754 반올림 규칙을 따른다는 점에서 일반적인 fmod() 함수와 차이가 있습니다. remainder() 함수의 동작 원리 remainder(x, y) 함수는 다음과 같은 수식으로 결과를 계산합니다. remainder(x, y) = x – rquote * y 여

  12. C++의 sqrt, sqrtf, sqrtl 함수 차이점과 사용법 총정리

    C++의 cmath 라이브러리에는 sqrt 외에도 다양한 제곱근 계산 함수가 포함되어 있습니다. sqrt는 기본적으로 double 타입 입력에 사용되며, 나머지 함수들은 float, long double 등 다른 자료형에 맞춰 사용됩니다. 각 함수의 특징과 용도를 자세히 살펴보겠습니다.1. sqrt() 함수sqrt()는 double 타입 데이터에 사용되는 함수로, 결과값 역시 double 타입으로 반환됩니다. 문법은 다음과 같습니다.double sqrt(double argument)예제 코드#include <cmath>

  13. C++에서 'using namespace std'가 나쁜 습관으로 간주되는 이유

    C++ 표준 라이브러리에는 컨테이너(vector, map 등), 알고리즘(sort, find 등)처럼 애플리케이션을 개발할 때 자주 사용하는 기능들이 포함되어 있습니다. 만약 이러한 이름들이 전역 공간에 그대로 노출된다면 어떻게 될까요? 예를 들어 라이브러리 쪽에서 queue 클래스를 전역으로 정의해 버린다면, 개발자는 이름 충돌 없이 동일한 이름을 다시는 사용할 수 없게 됩니다. 바로 이런 문제를 방지하기 위해 C++ 표준 위원회는 std라는 네임스페이스를 만들어 표준 라이브러리의 모든 이름을 그 안에 담아 두었습니다. usin

  14. C++에서 최소 비교 연산으로 세 수의 중간값 구하기

    이 글에서는 비교 연산을 최소한으로 사용하여 주어진 세 값의 중간값(middle value)을 찾는 방법을 알아봅니다. 예를 들어 세 개의 숫자 (10, 30, 20)이 주어졌다면, 가운데 값인 20을 반환해야 합니다. 정렬 없이 조건문만으로 해결할 수 있으며, 최대 2번의 비교만으로 중간값을 구할 수 있다는 점이 이 방법의 핵심입니다.먼저 알고리즘의 흐름을 살펴본 뒤, 이를 C++ 코드로 직접 구현해 보겠습니다.알고리즘세 수 a, b, c가 주어졌을 때, 다음 의사코드(pseudocode)와 같은 논리로 중간값을 찾습니다.midd

  15. C++ 정적 멤버 함수로 생성된 객체 수 계산하는 방법

    이 글에서는 정적(static) 멤버 함수를 사용하여 특정 클래스로부터 생성된 객체의 개수를 계산하는 방법을 알아봅니다.정적 멤버는 객체가 아닌 클래스 자체의 속성입니다. 따라서 하나의 클래스에 대해 정적 멤버는 단 하나의 인스턴스만 존재하며, 객체를 새로 생성하더라도 정적 멤버가 추가로 만들어지지 않습니다. 모든 객체가 이 값을 공유하게 됩니다.동작 원리이 문제에서는 객체 수를 추적하기 위해 정적 카운터 변수를 하나 선언하고, 현재까지 생성된 객체 수를 반환하는 정적 멤버 함수도 함께 정의합니다.새로운 객체가 생성될 때마다 생성자

  16. C++ static_cast 완벽 정리: 기본 형 변환부터 주의사항까지

    static_cast는 C++에서 가장 일반적으로 사용되는 형 변환 연산자로, 평범하고 일상적인 타입 변환을 수행합니다. 컴파일러가 암시적으로 처리하는 타입 강제 변환(implicit type coercion)과 동일한 방식으로 작동하며, 필요할 때 프로그래머가 명시적으로 호출할 수도 있습니다. 대표적인 활용 사례로는 float를 int로 변환하거나 char를 int로 변환하는 경우가 있으며, 상속 관계에 있는 클래스 포인터 간의 변환에도 사용할 수 있습니다. static_cast 기본 사용법 다음은 float 타입 변수를 int

  17. C++ Boost 라이브러리의 any 데이터 타입 완벽 가이드

    Boost 라이브러리는 C++ 개발자에게 방대한 범위의 기능을 제공하는 대표적인 오픈소스 라이브러리입니다. 그중 any 데이터 타입은 하나의 변수에 어떤 타입의 값이든 저장할 수 있게 해주는 강력한 기능입니다.자바스크립트나 파이썬처럼 동적 타이핑을 지원하는 언어에서는 이런 유연한 데이터 타입을 기본적으로 사용할 수 있습니다. 하지만 정적 타입 언어인 C++에서는 표준 문법만으로는 불가능하며, Boost 라이브러리의 boost::any를 통해서만 이 기능을 구현할 수 있습니다.boost::any의 기본 사용법boost::any 타입의

  18. C++ feclearexcept() 함수 완벽 가이드 – 부동 소수점 예외 초기화 방법

    C++ feclearexcept() 함수란?feclearexcept() 함수는 <fenv.h> 헤더에 정의된 함수로, 인자로 전달된 excepts 비트 마스크에 해당하는 지원되는 부동 소수점 예외(floating-point exception)들을 초기화(클리어)하는 데 사용됩니다.이 함수는 모든 예외가 성공적으로 해제되었거나 전달된 예외 값이 0인 경우 0을 반환합니다. 반면 일부 예외가 해제되지 못하면 0이 아닌 값(nonzero)을 반환합니다.또한 이 함수를 사용하려면 먼저 FENV_ACCESS를 활성화해야 합니다.

  19. C++ override 키워드 완벽 정리: 함수 재정의 실수를 컴파일 타임에 잡아내는 방법

    함수 오버라이딩(function overriding)은 C++에서 가장 널리 사용되는 핵심 기능 중 하나입니다. 함수 오버라이딩이란 기본 클래스(Base Class)에 이미 존재하는 함수를 파생 클래스(Derived Class)에서 다시 정의하는 것을 의미합니다. 이때 두 함수의 시그니처(signature)는 동일하지만, 실제 동작은 서로 다르게 구현됩니다.그런데 프로그래머가 오버라이딩 과정에서 실수를 저지르는 경우가 종종 있습니다. 예를 들어 함수 시그니처가 기본 클래스와 일치하지 않으면, 의도했던 오버라이딩이 아니라 완전히 새로

  20. Boost 다중 정밀도 라이브러리로 큰 수의 팩토리얼(계승) 계산하기

    C++에서 매우 큰 수의 팩토리얼(계승)을 구하려면 일반적인 정수형으로는 부족합니다. 64비트 정수(long long)조차 21! 이상의 값은 담지 못하고 오버플로가 발생합니다. 이럴 때 Boost 라이브러리의 다중 정밀도(multiprecision) 기능을 활용하면 64비트 한계를 넘어서는 임의 정밀도 정수를 손쉽게 다룰 수 있습니다. cpp_int란? boost::multiprecision::cpp_int는 값의 크기에 따라 자동으로 확장되는 임의 정밀도 정수 타입입니다. 별도의 자릿수 제한 없이 메모리가 허용하는 범위까지 정

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:55/300  20-컴퓨터/Page Goto:1 49 50 51 52 53 54 55 56 57 58 59 60 61