Coding Note
스마트 포인터 문제 - 순환 참조
스마트 포인터 (Smart Pointer) 레퍼런스 카운팅 기반의 스마트 포인터 구현 Reference Counting #pragma once /*--------------------- *RefCountable ---------------------*/ class RefCountable { public: RefCountable() : m_refCount(1) {} virtual ~RefCountable() {} int32 GetRefCount() const { return m_refCount; } int32 AddRef() { return ++m_refCount; } int32 ReleaseRef() { int32 refCount = --m_refCount; if (refCount == 0) { dele..
![[C++20] std::span](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaiqhO%2FbtrNWrDcK4a%2FLZBzgKrFntjAeUkFzABHbK%2Fimg.png)
[C++20] std::span
std::span C++ 20부터 추가된 연속된 메모리 공간을 추상화한 컨테이너다. 이러한 연속적인 공간을 갖는 컨테이너로는 vector, array, string 등이 있다. std::vector vecNums{ 1,2,3 }; std::array arrayNums{ 1,2,3,4 }; int cNums[6] = { 1,2,3,4,5,6 }; // c style 이와 같은 array들이 있다고할 때 하나씩 Print하기 위해서는 각 인터페이스에 맞는 함수를 만들어야한다. // vector 출력 void printVec(std::vector const& nums) { for (int num : nums) { cout
[C++] 문자열 정리
문자열 총정리 C- style의 char와 C++ style의 string이 있다. 하나씩 확인해보자. C - style char Array 사용 char a[6] = { 'a', 'b', '\n', 'c', 'd', 'e' }; cout
[C++17] string_view
string_view (C++17) C++17에서 string_view라는 기능이 추가되었다. void printString(const std::string& s) { std::cout
[DP] 음수 피보나치 수열
음수 피보나치 수열 일반 피보나치 수열은 F(n) = F(n-1) + F(n-2) (단, n은 1보다 클 경우) 로 정의된다. 즉, F(0) = 0, F(1) = 1, F(2) = F(1) + F(0) = 1 ....... 로 확장된다. 0 이하에 대해서도 피보나치 수열 적용이 가능한데, F(1) = F(0) + F(-1) 1 = 0 + F(-1) 즉, F(-1) = 1 이다. 이를 확장한다면 ... -8, 5, -3, 2, -1, 1, 0, 1, 1, 2, 3, 5, 8... 의 순으로 진행된다. 규칙성을 보면 음수 방향으로 갈 때 각 짝수 Index 마다 마이너스가 붙어서 음수가 되는 것을 확인할 수 있다. Value -8 5 -3 2 -1 1 0 Index (-) 6 5 4 3 2 1 0 인덱스는 ..
![[정리] 알고리즘에 유용한 계산 정리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnCHwe%2FbtrKJ69cXFv%2Fdtpc8M0drKfyqmWR6PsNt1%2Fimg.png)
[정리] 알고리즘에 유용한 계산 정리
수학 10 진수 -> N진법 변환 string ConvertBinaryNumber(int n/*10진수*/, int k/*진법*/) { string str; for (int i = n; i > 0; i /= k) { str += to_string(i % k); } reverse(str.begin(), str.end()); return str; } 비트 연산으로 홀수 & 짝수 계산 void OddEven() { int odd = 1001; int even = 1000; int a = odd & 1; int b = even & 1; } 이진수 변환 string ToBinary(int n, int num) { // n 자리수만큼만 string 추가 string str; for (int i = n - 1; i ..
![[Async] std::packaged_task](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwVB7e%2FbtrJFPHZka5%2FVoYueEDrzq2Xu0etYjUjs1%2Fimg.png)
[Async] std::packaged_task
std::packaged_task callable object를 wrap하는 템플릿 클래스이다. 즉, 람다함수나 기존의 함수 혹은 callable object를 비동기적으로 부를 수 있게 해주는 wrapper라고 생각하면 된다. 예를 들어, 비동기 함수 처리에는 std::async를 사용하거나 future,promise 쌍으로 다른 thread에 할당시키는 방법이 있었다. 그런데 packaged_task를 사용하면 비동기적으로 호출할 수 있는 오브젝트를 만들었기 때문에 std::async 보다는 우리가 원하는 컨트롤 할 수 있을 뿐 아니라 쉽게 코드를 만들 수 있다. Example Code #include #include #include #include int add1(int n) { return n +..
![[Async] std::async](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxcJAQ%2FbtrJC5KX72u%2FljVxXMmoRU08TTgVucRmvK%2Fimg.png)
[Async] std::async
std::async std:::async는 C++에서 비동기호출을 매우 쉽게 만들어준다. 이전에 promise와 future를 통한 커뮤니케이션 채널을 통해 비동기 함수를 구현할 수 있었다. 하지만 그 인터페이스를 보면 코드를 만들어가는 과정이 직관적이지 않다. 그래서 이러한 관계를 추상화시켜서 비동기 함수 호출을 더 쉽게 직관적으로 만들 수 있다. 간단한 코드부터 보자. Example Code : future, promise 컨셉 #include #include #include #include #include void add1(std::promise prms, int n) { prms.set_value(n+1); } int main() { int num = 42; std::promise prms; st..