GIT 브랜치 복구하기
·
C++
Git을 원래 상태로 복구하는 방법을 단계별로 정리해 보겠습니다.🔹 로그를 활용한 복구 (git log)만약 특정 커밋으로 이동하고 싶다면 Git 로그를 확인 후 체크아웃하면 됩니다.(1) 커밋 히스토리 확인git log --oneline5f6d9ad Fix enemy AI buga1c2b34 Add inventory system3e4f567 Initial commit (2) 특정 커밋으로 이동 (checkout)git checkout 5f6d9ad 이 명령어를 실행하면 특정 커밋으로 되돌아갈 수 있습니다.📌 주의checkout으로 이동하면 다시 Detached HEAD 상태가 될 수 있습니다. 🔹최종 정리1. 현재 상태 확인git branch브랜치 목록 확인2. 잠금 파일 삭제del .git\in..
매개변수 전달 시 *와 &
·
C++
(1) 포인터를 사용하는 경우1) 값이 없는 상태를 나타낼 필요가 있는 경우2) 함수가 가변적인 대상을 가리켜야 하는 경우3) 동적 메모리 사용 시 (2) 참조를 사용하는 경우1) 값이 항상 존재해야 하는 경우2) 코드가 간결해야 하고 값 변경이 직관적이어야 하는 경우3) 연산자 오버로딩이나 함수 인자 전달에서 주로 사용
const
·
C++
1. 변수에 사용값을 변경할 수 없게 함const int value = 10;value = 20; // 컴파일 에러: value는 const이므로 변경 불가 2. 포인터와 함께 사용🔹포인터가 가리키는 값이 상수일 때 : const int*const int value = 10;const int* ptr = &value;*ptr = 20; // 컴파일 에러: ptr이 가리키는 값은 변경 불가​🔹포인터 자체가 상수일 때: int* constint value1 = 10, value2 = 20;int* const ptr = &value1;ptr = &value2; // 컴파일 에러: ptr은 다른 주소를 가리킬 수 없음​🔹포인터와 값 모두 상수일 때: const int* constconst int value..
정적 바인딩 vs 동적 바인딩
·
C++
✔정적 바인딩프로그램 컴파일 시점에 함수 호출이 결정되는 바인딩으로 일반 함수에 해당(non-virtual)빠르고 메모리 사용이 적음 ✔동적 바인딩프로그램 실행 시점에 함수 호출이 결정되는 바인딩으로 가상 함수(virtual function_virtual 키워드) 사용실행 중에 객체의 실제 타입에 따라 적합한 함수 호출 //파생 클래스에서 기본 클래스의 함수를 재정의했더라도, //포인터나 참조가 기본 클래스 형식인 경우 기본 클래스의 함수가 호출#include using namespace std;class Base {public: virtual void Print() { // 동적 바인딩 cout Print(); // Derived Print // 정적 바인딩 (non-virtua..
자료형의 오버플로우
·
C++
값이 자료형의 최대값을 초과하면 최소값으로 순환됨 1. int크기: 4바이트 (32비트)부호 있는 int (default): -2,147,483,648 ~ 2,147,483,647부호 없는 unsigned int: 0 ~ 4,294,967,295 2. long long크기: 8바이트 (64비트)부호 있는 long long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807부호 없는 unsigned long long: 0 ~ 18,446,744,073,709,551,615 3. long크기와 범위는 시스템에 따라 상이대부분 long은 int와 동일한 크기(4바이트)로 동작하지만 64비트 시스템에서는 8바이트일 수도 4. short크기: 2바이트 (16비트)부..
입력 예외 처리
·
C++
#include using namespace std;int main(){ int num; cout > num; if(cin.fail()){ //입력 실패 여부 cout ::max(), '/n'); //남은 입력 버퍼 제거 } else{ cout 📌 입력 버퍼1. 사용자의 입력 > 입력 버퍼에 저장2. 프로그램에서 데이터 요청 시 입력 버퍼에 있는 "숫자 데이터"만 읽어옴(나머지는 버퍼에 남음)3. 버퍼에 있는 데이터가 전부 소비되지 않는다면(ex 숫자만 읽어가고 남은 문자) 계속해서 버퍼에 존재4. 입력 실패 상태가 되고 계속해서 오류 발생시킴 📌 입력 버퍼 관리 방법1. cin.ignore(n, delim)입력 버퍼에 남아 있는 데이터 무시cin.ignor..
Vector
·
C++
정적 배열(array)에 대응하는 동적 배열(dynamic array)에 해당(python 리스트 같은 거)❓왜 vector일까?STL → 데이터 구조에 대해 직관적이고 수학적 개념에서 영감1. 수학적 벡터의 배열성메모리 상에서 데이터 연속 저장2. 순서와 연산 가능성연속된 데이터를 다루며 연산 지원3. 추상적인 방향성데이터가 어떤 방향으로 나아가는 순차적인 흐름 #include using namespace std;/*---------------------------생성 및 초기화---------------------------*/vector v; //비어 있는 벡터vector v1(5, 10); //크기가 5이고, 모든 요소가 10으로 초기화된 벡터vector v2 ={1, 2, 3, 4}; //리스트..
반복문
·
C++
//1. 기본for (variable : container) { // 반복할 코드}//2. auto 변수 활용for (auto ch : str) { cout ) 활용for (char& ch : str) { ch = toupper(ch); // 문자열을 대문자로 변환}cout variable: 컨테이너에서 각 요소를 저장할 변수. 컨테이너 요소의 타입과 일치하거나 auto(컨테이너 요소의 타입을 자동으로 추론)를 사용할 수 있습니다.container: 순회할 대상, 즉 배열, 문자열, STL 컨테이너(vector, map, 등)
복사 vs 참조
·
C++
#include #include using namespace std;void printByValue(vector v) { // 복사본 생성 for (int num : v) cout & v) { // 참조 사용 for (int num : v) cout vec = {1, 2, 3, 4, 5}; printByValue(vec); // 복사 발생 printByReference(vec); // 복사 없이 원본 사용 return 0;}
문자열
·
C++
🔹 문자열 연결#include #include using namespace std;int main() { string str1 = "Hello, "; string str2 = "World!"; //1. + 연산자 string result = str1 + str2; cout 🔹 문자열 대체#include #include using namespace std;int main() { string str = "Hello World"; string newStr = "C++ Programming"; // 1. 인덱스 기준 대체 str.replace(6, 5, "C++"); // 출력: Hello C++ // 2. 반복자 사용하여 ..