분류 전체보기
[골5] 2023 - 신기한 소수
#include #include #include #include using namespace std; int n = 0; bool Prime(int num) { for (int i = 2; i * i
[골2] 10800 - 컬러볼
#include #include #include #include using namespace std; struct sColorBall { int n, color, size; sColorBall() = default; sColorBall(int n, int color, int size):n(n),color(color),size(size) { } }; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector vecBall(n); for (int i = 0; i > vecBall[i].color >> vecBall[i].size; } sort(vecB..
구조체 또는 클래스 관련 정렬 (sort 함수)
구조체 또는 클래스는 항상 연산자 오버로딩을 해줘야하고 클래스명으로 가야한다. struct Student { int id, pow; char team; Student(int a, char b, int c) : id(a),team(b),pow(c) { } bool operator(const Student& b) const { return pow > b.pow; } }; 여기서 pow 기준으로 정렬할텐데 이때 algorithm 헤더파일 내에 sort 함수를 사용하고 pred 인자로 해당 연산자 오버로딩 함수를 보내주면 된다. 디폴트 값 : less(); vector st; // pred 템플릿 인자로 무조건 클래스명으로 줘야한다. sort(st.begin(), st.end(), greater()); less..
CPU의 역사
최초의 16비트 CPU: 인텔 8086 / 8088(1978년) 1971년에 출시된 인텔의 '4004'가 원조다. 하지만 이는 전자계산기와 같은 특정 목적 단말기용으로 주로 쓰였으며, 오늘날 우리가 쓰는 PC(퍼스널컴퓨터)용 CPU의 원조는 1978년에 나온 인텔의 16비트 CPU인 8086, 그리고 그 자매품인 8088이라 할 수 있다. 이 때문에 지금도 PC용 CPU는 ‘x86 계열’이라 부른다. 최초의 32비트 CPU: 인텔 80386(1986년) 1980년대에 들어 PC의 이용 범위가 급격히 넓어지면서 한층 고성능의 CPU가 요구되었다. 1986년에 출시된 인텔 80386은 32비트 명령어를 처리할 수 있는 최초의 x86계열 CPU로, 흔히 ‘386’이라는 이름으로 불리곤 했다. 80386이 큰 ..
멀티 스레드 렌더링 (Multi Thread Rendering)
왜 해야할까? Direct3D 11 이전의 그래픽스 API는 단일 스레드에서 실행되는 것을 중점으로 두고 설계되었다. 암시적인 동기화 지점이 존재해서 API를 호출하고 난 다음 GPU의 처리가 완료 되었을 때 이후의 코드가 실행된다, 문제는 이렇게 순서를 맞춰서 진행하는 방식은 CPU와 GPU를 최대로 활용하지 못하는 점이다. CPU 계산 중에 GPU는 제출된 명령이 없기 때문에 아무런 일도 하지않고 CPU의 처리를 기다리게 되고 렌더링 중에는 동기화 지점으로 인해서 CPU는 GPU의 처리가 끝날 때 까지 기다리게 된다. 따라서 CPU와 GPU가 비효율적으로 사용되지 않도록 스레드를 분리하여 렌더링과 CPU 계산이 동시에 이뤄지도록 해야한다. GPU가 무언가를 그리도록 요청하기 위해서 그래픽스 API를 ..
C++ 포인터 객체 자살 (delete this)
delete this는 소멸자에 해선 안되고 또한 매우 안좋은 코딩 스타일이다. 사용하고자 하면 몇가지 주의 사항이 있다. new로만 인스턴스화가 되있어야 한다 (new[] X), 다른 포인터를 가리킨다던가, 레퍼런스를 가리켜서는 안된다. 맨 마지막 구문이여야 한다. 멤버 변수 변경 또는 함수 호출해선 안된다. this 오브젝트를 해제 후 건드려선 안된다, 역참조, -> 참조, 비교 등. class A { public: void fun() { delete this; } }; int main() { /* 실행 가능 */ A *ptr = new A; ptr->fun(); ptr = NULL; /* 에러 : Undefined Behavior */ A a; a.fun(); getchar(); return 0; ..
[Unreal] Static Mesh (스태틱 메쉬) 그림자 끄는/키는 방법 C++
EditorStaticMeshLibrary 내 EnableSectionCastShadow 스태틱 전역 함수가 존재하는데 언리얼 5부턴 레거시화가 됐다. 아래 소스코드 내 유심히 살펴보니 힌트를 얻을 수가 있었다, StaticMeshEditorSubsystem를 대신 사용하라고 쓰여져있다. StaticMeshEditorSubsystem에선 클래스 멤버 함수라 참조를 해야한다. 여기서 좀 헷갈릴 수가 있는데 아래와 같이 세 개의 모듈을 추가 해줘야한다. "UnrealEd", "EditorSubsystem", "StaticMeshEditor" UnrealEd 모듈은 (UEditorEngine 클래스 포인터) GEditor에 대한 매핑 EditorSubsystem 모듈은 UEditorSubsystem 클래스 포..
[Unreal] 사용자 정의 컴포넌트 (UActorComponent)
생성 방법은 간단하다, C++ 클래스 생성 > Actor Component를 선택한다. 아래와 같이 함수들이 기본으로 설정될텐데 처음 보는 것들이다. 엑터일 시 PrimaryActorTick.bCanEverTick = true; 이지만 엑터 컴포넌트 일땐 PrimaryComponentTick.bCanEverTick = true; 이다. BeginPlay 함수는 동일하다 Tick 함수 대신 TickComponent 함수이다. 사용 조건은 간단한데 다른 컴포넌트가 들어가면 안된다 즉 데이터 들고있는 용도 또는 오버라이딩을 하여 여러군데에 같은 함수를 선언하는걸 방지용으로만 생각하면 된다. HP Comp에서 저런 형태가 나오는게 정상이다 만약에 헤더파일에 다른 기타 컴포넌트를 선언할 시 BeginPlay 함수..
C++ 정적 바인딩과 동적 바인딩의 차이점
바인딩은 일반적으로 한 항목을 다른 항목에 매핑하는 것을 나타낸다. 컴파일된 언어의 컨텍스트에서 바인딩은 함수 호출과 함수 정의 간의 연결이다. C++에서 함수가 호출되면 프로그램 컨트롤은 해당 함수가 정의된 메모리 주소에 바인딩된다. C++에는 정적(또는 초기) 바인딩과 동적(또는 후기) 바인딩의 두 가지 유형의 바인딩이 있다. 이 게시물은 C++의 정적 바인딩과 동적 바인딩의 차이점에 대한 개요를 제공한다. 정적 바인딩은 컴파일 타임에 발생하고 동적 바인딩은 런타임에 발생한다. 따라서 각각 조기 및 후기 바인딩이라고도 한다. 정적 바인딩에서는 함수 정의와 함수 호출이 컴파일 시간에 연결되지만 동적 바인딩에서는 런타임까지 함수 호출이 해결되지 않으므로 런타임까지 바인딩되지 않는다. 정적 바인딩은 함수를..