Make Unreal REAL.
article thumbnail
실수를 비교하는 방법
C++/기타 2023. 1. 30. 10:23

부동 소수점 실수는 수를 정확히 표현할 수 없고 오차가 존재한다. 유니티나 언리얼 에디터에서 1이었던 값이 0.99999로 바뀌어 있는 걸 본 적이 있을 것이다. 따라서 실수가 같은지 비교하는 것은 사실 그리 간단하지 않다. 대략 같다. // 절댓값(a - b) 절댓값이 크다고 추측되는 수 * Epsilon bool definitelyLessThan(float a, float b) { return (b - a) > (fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * EPSILON; } 예시 #include #include #define EPSILON numeric_limits::epsilon() using namespace std; // 절댓값(a - b) 절댓값이 크다고 추측되는..

article thumbnail
람다 식(Lambda expression)
C++/기타 2023. 1. 21. 18:22

Lambda 식 함수 compile time에 클래스로 처리되며 실제로는 functor class가 생성된다. 캡처 변수를 갖는 Lambda 식 함수는 생성자를 갖는다. 메모리나 성능 면에서 클래스나 함수 호출보다 비용이 저렴하다. 클래스 변수 생성과 동일하게 스택에 할당 된다. #include #include #include using namespace std; void main() { // 반환 형식을 명시 cout int { return a + b; }(10, 20)

article thumbnail
펑터(Functor)
C++/기타 2023. 1. 21. 17:21

함수처럼 사용할 수 있는 객체이며 Function Object (함수 객체)라고도 불린다. STL에서는 sort 함수 등에 사용되는 greater, less 등의 기본 functor가 제공된다. Lambda 식 함수도 실제로는 Functor이다. #include #include #include using namespace std; class Number { private: int m_Num; public: void operator()(int num) { m_Num = num; } int operator()() { return m_Num; } }; class MyComparator { public: bool operator()(const int& a, const int& b) { return a < b; ..

article thumbnail
템플릿(Template)
C++/기타 2023. 1. 20. 21:58

템플릿(Template) Compile time에 형식이 자동으로 추론되어 구체화된다. 자료형마다 함수를 만들지 않고 재활용할 수 있다. 템플릿을 사용하는 자료형의 개수만큼 코드의 크기가 증가한다. 컴파일 시간이 증가한다. #include #include using namespace std; template void print(const array& arr) { for (T e : arr) cout

article thumbnail
깊은 복사와 얕은 복사
C++/기타 2023. 1. 20. 21:37

깊은 복사 (Deep copy) 다른 Memory chunk를 만들어 값을 복사한다. 한 쪽에서 값을 수정해도 다른 쪽에 영향을 미치지 않는다. 얕은 복사 (Shallow copy) 같은 Memory chunk를 가리키게 된다. 한 쪽에서 값을 수정하면 다른 쪽에 영향을 미친다. #include #define ARR_SIZE 5 using namespace std; void main() { int* p; int arr[ARR_SIZE] = {1, 2, 3, 4, 5}; // 얕은 복사 p = arr; // 깊은 복사 p = new int[ARR_SIZE]; for (int i = 0; i < ARR_SIZE; ++i) p[i] = arr[i]; delete[] p; p = nullptr; }

article thumbnail
std::iterator와 std::reverse_iterator
C++/기타 2023. 1. 20. 21:25

반복자는 증감 연산자, 비교 연산자를 지원한다. 순방향 반복자(Forward Iterator) 앞에서 뒤 방향으로 진행한다. 역방향 반복자(Reverse Iterator) 역방향 반복자는 뒤에서 앞 방향으로 진행한다. #include #include using namespace std; void main() { vector v = {1, 2, 3, 4, 5}; for (vector::iterator it = v.begin(); it != v.end(); ++it) cout

검색 태그