C++ 메모리 관리: 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)의 차이점

1. 개요 및 핵심 개념 C++에서 객체를 복사할 때 메모리를 어떻게 다루느냐에 따라 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)로 구분됩니다. 이는 특히 클래스 내부에서 동적 메모리 할당을 사용할 때 프로그램의 안정성을 결정짓는 매우 중요한 요소입니다. 얕은 복사 (Shallow Copy): 객체의 멤버 변수 값을 그대로 복사합니다. 만약 멤버가 포인터라면, 포 ...

6월 27일 20:25에 게시됨

2024 CCPC 동북 4성 초청 대회 알고리즘 문제 해설 및 구현

Problem J. Breakfast 이 문제는 주어진 공식을 기반으로 한 간단한 산술 연산을 요구합니다. 표현식의 결과를 계산한 후, 출력 형식에 맞게 소수점 둘째 자리까지 포맷팅하면 됩니다. #include <iostream> #include <iomanip> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); double base_value = 32.0; ...

6월 27일 16:56에 게시됨

2025년 광저우대학교 프로그래밍 경진대회 신입생 대회

A 마법 문 Trial 크기 비교 문제, 난이도 1성 #include <iostream> using namespace std; int main() { int x, y, z, w; cin >> x >> y >> z >> w; if (x < w && y == z) cout << "YES"; else cout << "NO"; return 0; } B 약초 채집사 약초를 수집 ...

6월 27일 06:21에 게시됨

C++의 친구 함수와 모듈 중심 설계

다음과 같은 선언은 표준 라이브러리에 포함된 것이 아니라, 단지 개념을 설명하기 위해 사용한 예시입니다: class Matrix; class MatrixOperator; 이 두 줄은 전방선언(Forward Declaration)을 나타냅니다. 즉, 해당 타입이 존재한다는 것을 알리지만, 정의는 나중에 하겠다는 의미입니다. 예를 들어, 다음과 같이 구성할 수 있습니다: class Matrix; // 전방선언 cl ...

6월 26일 21:42에 게시됨

CANdevStudio 프로젝트 시작하기

CANdevStudio 프로젝트 튜토리얼 1. 프로젝트 디렉토리 구조 CANdevStudio는 CAN 버스 시뮬레이션을 위한 개발 도구입니다. 프로젝트의 디렉토리 구조는 다음과 같이 구성되어 있습니다: CANdevStudio/ ├── CMakeLists.txt ├── README.md ├── src/ │ ├── main.cpp │ ├── CanBusAdapter.cpp │ ├── CanBusAdapter.h │ ├── ... ├── include/ │ ├── CanBusAdapter ...

6월 26일 18:54에 게시됨

C++ 추상 클래스와 템플릿을 활용한 객체지향 프로그래밍

추상 기반 클래스 구현 출판물 계층 구조 설계: // 추상 베이스 클래스 class Media { public: Media(const std::string &title = "") : title(title) {} virtual ~Media() = default; virtual void release() const = 0; virtual void consume() const = 0; protected: std::string title; }; // 도서 클래스 class Novel : public Media { public: ...

6월 26일 17:37에 게시됨

Codeforces Round #879 Div.2 참가 후기 및 문제 풀이

A번 문제: 부호 조정을 통한 곱의 양수화 배열에 포함된 정수들 중 -1과 1의 개수를 세어, 전체 원소의 곱이 양수가 되도록 최소 연산 횟수를 구하는 문제이다. 핵심은 음수(-1)의 개수가 홀수일 경우 하나를 제거하고 1로 변환해야 한다는 점이다. 이후 1의 개수가 -1의 개수 이상이 될 때까지 두 개씩 변환해 나간다. 이때 매번 두 개의 -1을 1로 바꾸므로 연산 횟수는 2 ...

6월 25일 21:59에 게시됨

openMVG 파이프라인에서 C++ 코드 디버깅을 위한 명령줄 인수 시뮬레이션 방법

Python 스크립트를 통해 실행되는 openMVG C++ 도구 디버그하기 openMVG의 tutorial_demo.py, SfM_SequentialPipeline.py, 또는 SfM_GlobalPipeline.py와 같은 파이썬 파이프라인을 사용할 때, 내부적으로 호출되는 C++ 바이너리(예: openMVG_main_SfMInit_ImageListing)의 동작을 디버깅해야 할 경우가 있다. 이때 파이썬 코드는 단지 외부 실행 파일을 호출할 뿐이며, 실 ...

6월 25일 19:56에 게시됨

C++ BFS 알고리즘을 활용한 FloodFill 문제 해결

FloodFill 유형 문제 분석 1. 벽과 문 거리 계산 문제 설명: 2D 그리드에서 방 상태를 나타내는 rooms 배열이 주어집니다. 각 셀은 벽(-1), 문(0), 빈 방(2³¹-1) 중 하나입니다. 모든 빈 방에 대해 가장 가까운 문까지의 거리를 계산하세요. 제약 조건: m == rooms.length n == rooms[i].length 1 ≤ m, n ≤ 250 해결 전략: 모든 문의 위치를 큐에 초기 삽입합니다. BFS를 ...

6월 25일 00:44에 게시됨

C++에서의 상속 메커니즘과 활용

1. 상속의 개념 상속(inheritance)은 객체 지향 프로그래밍에서 코드 재사용을 가능하게 하는 가장 중요한 메커니즘입니다. 기존 클래스의 특성을 유지하면서 확장하여 새로운 기능을 추가할 수 있게 해주며, 이렇게 생성된 새로운 클래스를 파생 클래스(derived class)라고 합니다. 상속은 객체 지향 프로그래밍의 계층 구조를 나타내며, 단순한 개념에서 복잡한 개념으로 ...

6월 25일 00:37에 게시됨