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에 게시됨