일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- const
- NRVO
- UE5
- 프로그래머스
- winapi
- 티스토리챌린지
- UnrealEngine4
- RVO
- C
- C++
- IFileDialog
- DirectX11
- softeer
- GeeksForGeeks
- Frustum
- 백준
- UnrealEngine5
- 오블완
- baekjoon
- RootMotion
- 언리얼엔진5
- 2294
- algorithm
- 팰린드롬 만들기
- 줄 세우기
- 1563
- TObjectPtr
- directx
- Unreal Engine5
- Programmers
- Today
- Total
목록C++ (43)
Game Develop

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 string addString(string s) { string result; for (int i = 0; i = 0x20) // 출력가능한 문자열이면 { result = result + s[i]; // 1번 //result += s[i]; // 2번 } } return result; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); string input; string h = "12345678123242324141424214124215..
배열은 선언과 동시에 정의를 해줘야한다. 그래서 보통 아래처럼 정의한다. int arr[30]; int arr[]; // Error. 그리고 선언된 배열은 포인터변수와 다르게 상수이다. 해당 변수에 다른 값을 대입하지 못한다. 값을 대입하려 할 경우 l-value가 아니라며 컴파일에러가 뜬다. 이런점만 빼면 거의 대부분이 유사하긴 하다. 이외에 차이점을 좀 더 나열하자면 아래와 같다. 1. sizeOf를 사용할 때. sizeof(포인터변수) -> 포인터변수의 크기가 리턴된다. 포인터변수의 크기는 32bit컴파일러인지, 64bit컴파일러인지에 따라 다르다. sizeof(배열) -> 배열전체의 총 크기를 변환한다. int arr[3]인 경우, sizeof(int) * 3이 될 것이다. 2. 문자열 문자열을 ..

해쉬란? -> 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 '값' 입니다. 키에 대한 해시값을 사용하여 값을 저장하고 키-값 쌍의 갯수에 따라 동적으로 크기가 증가하는 associate array 이다 키에 대한 해시값을 구하는 과정을 hashing(해싱)이라고 한다. 해시값 자체를 index로 사용하기 때문에 평군 시간복잡도가 O(1) 로 매우 빠르다 → 해시 태이블의 크기에 상관없이 데이터에 빠르게 접근할 수 있다. → 모든 데이터를 살피지 않아도 검색과 삽입/삭제를 빠르게 실행할 수 있다. 그리고 첫번째항목인 key를 Value로 변환시키는 함수를 해쉬함수라 한다. 각 키값들은 해쉬테이블이라 하는 곳에 저장되며, 해쉬함수의 결과값의 범위(보통 인덱스)를 버켓(bu..
보통 int형 배열을 선언하고 0으로 초기화하려하면 아래와 같이 코드를 작성한다. 1. int arr[200] = {0}; 2. memset(arr,0,200); 두 방법의 차이는 뭘까? 정답은 거의 동일하다이다. Visual Studio 2017 기준으로, 컴파일러는 두 방법 다 내부적으로 _memset을 호출해서 해당 작업을 수행한다. 0으로 말고, 다른값으로 초기화하고 싶으면 아래와 같은 함수를 사용하자. fill_n (arr,200,-1000); // arr을 -1000으로 초기화. 2차원배열을 초기화하고 싶다면 아래와 같이 사용하면 된다. int arr[200][200]; fill(&arr[0][0], &arr[199][200], -1000) // 2차원배열 arr을 -1000으로 초기화. 보다..

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class A { private: int sum; public: void Test(); }; void A::Test() { A a; a.sum = 20; cout
++count와 count++의 차이는 뭘까? 결과론적으론 ++count는 객체를 반환, count++은 값을 반환한다는 것이다. 아래의 코드를 보자. int x = 5; int y = ++x; 사람이 의도한대로(아마도) x의 값은 1을 증가시키고 그 값이 y에 정상적으로 들어간다. 메모리에 있는 x값을 직접 증가시키고 x객체를 반환시킨다. 하지만 아래는? int x = 5; int y = x++; 사람은 y에 6이 들어가있길 바라지만, 실제로는 5가 들어있다. 물론 해당 라인의 실행이 끝난 이후에는 x에는 6이 정상적으로 들어가있다. 'x++'이라는 후위연산자의 리턴값은 컴파일러가 임시로 생성한 복사값이다. 후위연산이 실행되면 컴파일러는 임시객체에 변경하기전의 원본을 복사한다. 그리고 원본의 메모리에 ..

class Parent { public: Parent() { cout
아래와 같은 코드가 있다고 가정해보고 분석해보자. char* ptc = "Hello"; 여기서 Hello는 메모리구조중 하나인 Text Segment에 저장되고 그 주소를 리턴해서 ptc에 저장된다. 반드시 Text Segment에 저장되는게 아니라 Data Segment에 담겨지기도 한다는데, 이는 컴파일러마다 다르다고 한다. 일단 본 글에선 Text Segment라고 가정한다. TextSegment에 대한 설명은 아래와 같다. 프로그램 파일의 내용이 저장된다. 즉, .exe 내용인 기계어. 그리고 3, 'a', "Hello" 같은 리터럴이 저장된다. 개발자가 절대 수정할 수 없는 Read-Only 영역이다. 개발자가 수정할 수 없는 읽기전용의 영역이기 때문에 ptc라는 변수를 이용해서 값을 변경하는건..