C++ 템플릿 기초 이해하기
소스 코드 컴파일 환경: Windows 10 x86
디스어셈블리 도구: IDA Pro
템플릿을 처음 접한 것은 C#의 제네릭 프로그래밍을 통해서였습니다. 표면적으로는 특정 제약 조건 내에서 다양한 인자 타입에 대해 메서드를 재사용할 수 있게 해주어 코드 중복을 줄여준다는 이해를 했습니다. 이후 C++과 어셈블리를 접하면서 템플릿의 원리에 대한 의문이 생겼습니다. 왜 템플릿의 ...
7월 1일 05:42에 게시됨
VS2022 + Qt 6.7.2 타이머 사용법 두 가지
1. QObject 타이머 이벤트 활용
QObject를 상속받는 모든 클래스는 timerEvent(QTimerEvent *event) 가상 함수를 제공합니다. startTimer()로 간격과 타이머를 시작하고, 이 함수를 재정의하여 작업을 처리합니다. 여러 타이머는 ID로 구분하며, killTimer()로 종료합니다.
// 헤더에서 선언
protected:
void timerEvent(QTimerEvent *event) override;
int m_time ...
7월 1일 00:29에 게시됨
C++ chrono 라이브러리를 활용한 시간 간격 및 시점 관리
비율 표현을 위한 ratio
C++11에서 도입된 std::ratio는 컴파일 시점에 유리수(분수)를 표현하기 위한 템플릿 클래스입니다. 분자(N)와 분모(D)를 비타입 템플릿 매개변수로 받아 비율을 정의합니다.
template<std::intmax_t N, std::intmax_t D = 1>
class ratio;
표준 라이브러리는 자주 사용되는 SI 접두어를 기반으로 한 비율 타입을 미리 정의해 두고 있습니다 ...
6월 30일 22:32에 게시됨
C++에서의 포인터 이해
C++에서 포인터는 메모리 주소를 저장하는 변수로, 다른 변수나 객체에 간접적으로 접근하고 조작할 수 있습니다.
1. 포인터의 개념
포인터는 특정 데이터의 메모리 주소를 저장하는 변수입니다. 자신의 메모리 주소도 존재하지만, 저장된 값은 다른 변수의 주소입니다.
2. 포인터 선언 문법
타입 *변수명; // 예: int *ptr; double *p;
- 별표(*)의 위치는 ...
6월 30일 04:31에 게시됨
pugixml을 활용한 XML 데이터 처리 기법
XML 처리 라이브러리 pugixml 소개
pugixml은 경량이며 고성능의 C++ 기반 XML 파서로, 구조화된 데이터를 효율적으로 읽고 쓸 수 있도록 설계되었습니다. 주요 특징은 다음과 같습니다:
DOM 유사 인터페이스 제공 — 트리 탐색 및 수정에 용이
빠른 비검증 파싱 속도 — 대용량 파일 처리에 적합
XPath 1.0 지원 — 복잡한 노드 접근 가능
유니코드 완전 지원 — 인 ...
6월 30일 04:03에 게시됨
NOIP 2023 알고리즘 문제 풀이
문제 1: 간단한 문자열 처리
첫 번째 문제는 매우 straightforward합니다. 각 행의 문자를 추출하여 정렬한 후 최소 문자열을 만들고, 역순으로 배치하여 최대 문자열을 만들면 됩니다.
코드 확인하기
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template<typename T>
void processRange(T* start, T* end, function<void(T*)& ...
6월 29일 21:06에 게시됨
C++에서의 배열과 포인터
C++ 책이나 튜토리얼 대부분은 배열과 포인터를 함께 다룹니다. 그 이유는 무엇이며, 둘 사이에는 어떤 연관성이 있을까요?
C++에서 배열과 포인터는 밀접하게 연결되어 있으며, 주요 관계는 다음과 같습니다.
1. 배열 이름은 포인터다
대부분의 상황에서 배열 이름은 배열의 첫 번째 요소를 가리키는 포인터로 암시적으로 변환됩니다. 예를 들어, int arr[5];라는 배열 ...
6월 29일 18:28에 게시됨
Qt 레이아웃 시스템 완벽 가이드: WPF 개발자를 위한 핵심 비교
Qt는 WPF 및 WinForms 개발자에게 매우 흥미로운 선택지입니다. 이 글에서는 Qt 레이아웃 시스템의 핵심 개념을 다루며, WPF 경험이 있는 개발자들이 어떻게 Qt로 빠르게 전환할 수 있는지에 초점을 맞춥니다.
Qt의 핵심 아키텍처
Qt는 크로스 플랫폼 UI 프레임워크로 C++를 기반으로 하며, 강력한 레이아웃 시스템과 논리적 픽셀 단위를 제공합니다. 기본적으로 DPI 인식 ...
6월 29일 02:33에 게시됨
메모리 주소 계산의 원리와 활용
메모리 주소의 기본 개념
메모리 주소는 컴퓨터 시스템에서 각 저장 단위를 식별하는 고유한 값입니다. 현대 컴퓨터 아키텍처에서는 메모리를 선형 주소 공간으로 구성하며, 각 주소는 일반적으로 1바이트 크기의 저장 위치를 나타냅니다. 프로그램 실행 중에는 이러한 주소를 통해 데이터에 접근하고 수정 작업을 수행합니다.
포인터를 통한 주소 조작
C/C++ 언어에서 포 ...
6월 28일 00:09에 게시됨
C++에서의 참조 특성 및 활용
참조의 기본 개념
C++에서는 참조(reference)를 통해 변수에 별칭(alias)을 부여할 수 있습니다. 다음 예시를 살펴보겠습니다.
int main() {
int x;
int &y = x;
int number;
int &alias = number;
}
위 코드에서 y는 x의 별칭이며, alias는 number의 별칭입니다. 따라서 y와 alias를 통해 해당 변수들의 값을 읽거나 수정할 수 있습니다.
참조 ...
6월 28일 00:06에 게시됨