본문 바로가기

프로그램97

cupy, numba import cupy as cp from cupy.cuda import StreamingPriorityQueue from numba import cuda # 그래프 정점의 개수 n = 6 # 인접 리스트로 그래프 생성 graph = [[] for _ in range(n)] graph[0].append(1) graph[0].append(2) graph[1].append(3) graph[2].append(3) graph[2].append(4) graph[3].append(5) graph[4].append(5) # DFS 함수 @cuda.jit(device=True) def dfs_kernel(graph, visited, v, visited_matrix): visited[v] = True visited_mat.. 2023. 3. 28.
마크다운 간단 사용법 마크다운 예시 제목 및 글머리 This is Title ============ This is Subtitle ------------ # This is a Header Level1 ## This is a Header Level2 ### This is a Header Level3 #### This is a Header Level4 ##### This is a Header Level5 ###### This is a Header Level6 This is Title This is Subtitle This is a Header Level1 This is a Header Level2 This is a Header Level3 This is a Header Level4 This is a Header Level5 Th.. 2022. 6. 19.
[C++ 기본 4] 2. 추상클래스 객체지향에서 인스턴스화 시킬 수 없는 클래스를 추상클래스라 한다. C++언어에서는 추상클래스를 함수의 값을 NULL(아마도 C언어에서 함수포인터를 NULL로 하는 것과 같은 듯 하다.)로 지정하는 것으로 추상 함수를 만들고, 추상함수를 가지고 있는 객체를 추상클래스로 지정한다. C++에서는 보통 인터페이스를 구현하고자 할 때 추상클래스를 이용하여, 인터페이스를 구현한 객체가 해당 인터페이스를 필수로 구현하도록 컴파일러 단계에서 강제하는 방식을 주로 사용한다. // 2_추상클래스 168 page #include // 추상 클래스 : 순수 가상함수가 한개 이상 있는 클래스 // 특징 : 객체를 만들수 없다. // 의도 : 특정 함수의 구현부를 제공하라고 지시 하는 문법. class Shape { public.. 2022. 5. 17.
[C++ 기본 4] 1. 가상소멸자 대부분의 C++ 프로그램에서는 객체를 핸들링하기 위해서 객체 포인터를 주로 사용하며, 파생클래스와 기반클래스 객체들을 일괄로 다루기 위해 기반클래스 포인터를 사용한다. 만약, 기반클래스 포인터를 이용하여 객체를 핸들링할 때, 객체의 소멸자가 가상함수가 아니라면 파생클래스를 소멸시킬 때 기반클래스의 포인터를 이용하여 소멸시키기 때문에 기반클래스의 소멸자가 불려 비정상적으로 객체를 소멸시키게 된다. 때문에 클래스의 소멸자는 가상함수(virtual function)이어야만 한다. // 1_가상소멸자 149 page #include // 핵심 : 모든 기반 클래스의 소멸자는 반드시 가상함수 이어야 한다. class Base { public: virtual ~Base() {} // 기반 클래스의 소멸자가 가상이면.. 2022. 5. 17.
[C++ 기본3] 8. mangling C++ 은 C가 아니다. C++와 C는 거의 호환되는 것처럼 보이지만, 실제로는 다르게 동작하고 있다. C++에서는 C에서 지원하지 않는 다형성과 같은 특징을 지원하고 있으며, 이를 위해서 mangling이라는 구조를 도입하여 여러 함수들과의 충돌을 방지하고 있다. mangling 방법은 컴파일러별로 상이하다. // 9_mangling // C 로 컴파일 하면 : 함수이름 Add(gcc), _Add(vc) // C++로 컴파일 하면 : ?Add@XXYYH@Z(VC++), ??(g++) // name mangling : C++ 컴파일러가 함수이름을 변경하는 것 // => 함수 오버로딩 때문에 Add 함수가 여러개 일수 있으므로 int Add(int a, int b) { return a + b; } int .. 2022. 5. 15.
[C++ 기본3] 7. 가상함수 C++의 다형성과 같은 특징들은 컴파일 시간에 호출할 함수가 정해진다는 특성이 있다. 만약 여러 클래스에 대해서 같은 함수를 만들고, 기반 클래스의 함수 포인터를 이용하여 핸들링하게 되는 경우 기반 클래스에 있는 함수를 호출하게 된다.(컴파일 시간에 기반 클래스의 함수로 바인딩 되기 때문에) 기반 클래스의 함수를 호출하면서 동작은 실제 클래스별로 다르게 동작시키고 싶은 경우 함수 호출에 따라 실제 사용할 함수를 동적으로 결정하여야 하며, 이 때 가상함수(virtual function) 을 사용하여야 한다. // 7_가상함수1 144 page ~ #include class Animal { public: virtual void Cry() { std::cout Cry() 를 어떤 함수로 연결할것인가 ? // .. 2022. 5. 15.