일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GeeksForGeeks
- 1563
- RVO
- 줄 세우기
- 백준
- 절두체
- 프로그래머스
- DirectX11
- directx
- baekjoon
- winapi
- 언리얼엔진5
- 절두체 크기
- Programmers
- NRVO
- UnrealEngine5
- RootMotion
- 팰린드롬 만들기
- Frustum
- 가장 큰 정사각형
- IFileDialog
- DeferredRendering
- UnrealEngine4
- UE5
- algorithm
- softeer
- C++
- const
- 2294
- C
- Today
- Total
목록C++/C++ (33)
Game Develop
해쉬란? -> 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(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라는 변수를 이용해서 값을 변경하는건..
내 포트폴리오에 SafeDelete를 구현하면서 관련 글이 나와서 읽었는데, 알아두면 좋을것 같아 따로 적는다. 일반 단일객체야 그냥 Delete 쓰면 되고, 문제는 배열을 동적할당 받은것을 해제할 때다. int *t = new int[2]; delete t; // 에러 delete[] t; // Ok. t라는 변수는 그저 주소를 담고있는 포인터변수니까 delete t; 해도 괜찮지 않을까..하는 작은 의구심을 가지고 있을 수 있겠지만, 우리의 목표는 new int[2]로 할당된 힙메모리의 영역을 전부 해제시키는거다. 근데 그냥 delete t;만 하면 int 1개 정도의 메모리만 해제된다. 그리고 심지어 에러가 뜬다.. 메모리누수 관련된 에러인데 12바이트의 메모리누수에 대한 에러가 뜬다. 우리가 할당..
초기화리스트를 사용해야 하는 경우 2가지와 사용할 경우 이점을 설명해보겠다. 1. 클래스에서 상수형변수, 참조형변수를 멤버변수로 보유해야 할 경우. 상수형 변수와 참조형 변수는 둘 다 반드시 선언과 동시에 초기화를 시켜야 한다. 애초에 그렇게 하지 않으면 바로 에러가 나오기 때문에 컴파일도 못한다. 초기화리스트는 말 그대로 '초기화'이기 때문에, 생성자에서 원하는 값으로 초기화가 가능하다. 메인함수에서 인스턴스를 생성할 때 원하는 매개변수값으로 해당 인스턴스의 상수형변수, 참조형변수를 초기화시키는게 가능하다는 것이다. 아래의 예시를 보면 잘 되는걸 확인할 수 있다. 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 ..