본문 바로가기

C++

(44)
[C#] 코드의 문서화를 도와주는 Doxygen https://luckygg.tistory.com/346 [Doxygen] 자주 사용하는 소스 코드 주석 및 페이지 문법 사용 방법(예제 포함) Doxygen 사용을 위한 본문은 아래 링크를 참고하세요. [Doxygen] 독시젠으로 코드 문서 만들기 총정리 (예제 포함) [Doxygen] 독시젠으로 코드 문서 만들기 총정리 (예제 포함) 독시젠(Doxygen)이란? 혹시 luckygg.tistory.com
[C++] 스마트 포인터 메모 스마트 포인터란? 프로그램이 메모리 및 리소스 누수 없이 예외로부터 안전한지 확인하는 데 사용되는 포인터. 스마트 포인터(최신 C++) 자세한 정보: 스마트 포인터(최신 C++) learn.microsoft.com 메모리 누수가 일어나는 상황 + 스마트 포인터 적용 예제 : 개체 수명 및 리소스 관리(RAII) 리소스 누수 방지를 위해 최신 C++에서 RAII 원칙을 따릅니다. learn.microsoft.com 3가지의 스마트 포인터 unique_ptr 기본 포인터로 한 명의 소유자만 허용합니다. shared_ptr이 필요하다는 점을 확실히 알 경우 POCO의 기본 선택으로 사용합니다. 새 소유자로 이동할 수 있지만 복사하거나 공유할 수 없습니다. 사용하지 않는 auto_ptr을 대체합니다. boost..
[c++] async 테스트 #include #include #include #include void for_print(int num) { // std::this_thread::sleep_for(std::chrono::seconds(1)); for (int i = 0; i < 100; i++) fprintf(stderr, "%d번 Thread : %d\n", num, i); } int main() { for (size_t i = 0; i < 100; i++) std::async(std::launch::async, for_print, i); return 0; } 멀티쓰레드로 실행되지 않음. (하나씩 동기 실행됨) int main() { for (size_t i = 0; i < 100; i++) std::future f = std::a..
[C++] 구조체의 크기 (size of struct) 구조체의 크기는 구조체를 구성하는 요소들에 의해 정해 집니다. 하지만 크기를 출력해보면 예상한 값과 다르게 나올때가 있는데, 그 이유와 구조체의 구조에 대해 알아보겠습니다. struct Packet00{ charflags;// 1byte shortcount;// 2byte intmsg;// 4byte } sizeof(Packet00);// 8byte 위 구조체의 크기는 어떻게 정해졌을 까요? 구조체는 구조체가 포함하고 있는 요소들중 가장 큰 값을 기준으로 그 값의 배수만큼의 크기를 가집니다. Packet 구조체의 요소들의 크기를 더한 값은 7byte입니다. 하지만 요소들 중 크기가 가장 큰 int가 4byte의 크기를 가지기 때문에 총 크기는 그 배수인 8byte로 정해집니다. 또 다른 예를 들어보겠습니..
[C, C++] 표준 입출력 실험 (scanf) 입력 포맷 %[*][폭(width)][한정자(modifiers)]타입(type) ex) %d - 정수 입력 %*d - 정수 입력 1번 무시 %10s - 문자를 10개 까지만 입력받음 %10s%*s -문자를 10개 입력 받고 나머지 문자열은 버림 %[^\n] - \n이 나오기 전까지 문자열을 읽어 들인다. 이 경우 공백과 tab을 무시하지 않는다. 1. 문자 #include void manyChar() { char c1, c2, c3, c4, c5; scanf_s("%c", &c1); scanf_s("%c", &c2); scanf_s("%c", &c3); scanf_s("%c", &c4); scanf_s("%c", &c5); printf("%c%c%c%c%c", c1, c2, c3, c4, c5); } '..
[코딩인터뷰 완전정복] 5.1 삽입 Q : 두 개의 32비트 수 N과 M이 주어지고, 비트 위치 i와 j가 주어졌을 때, M을 N에 삽입하는 메서드를 구현하라. M은 N의 j번째 비트에서 시작하여 i번째 비트에서 끝난다. j번째 비트에서 i번째 비트까지에서 M을 담기 충분한 공간이 있다고 가정한다. 다시 말해, M=10011이라면, j와 i사이에 적어도 다섯 비트가 있다고 가정해도 된다는 것이다. j = 3이고 i = 2인 경우처럼 M을 삽입할 수 없는 상황은 생기지 않는다고 봐도 된다. 1. 입력값이 10진수로 표현된 비트 인 경우 j와 i사이에 충분한 공간이 있다는 가정이므로 M에 10^(i-1)만큼 곱해서 N에 더해주면 된다. 이때, M이 들어갈 자리에 있는 N의 비트값을 지워준다. #include #include int main()..
[코딩인터뷰 완전정복] 4.12 합의 경로 Q : 각 노드의 값이 정수(음수 및 양수)인 이진 트리가 있다. 이때 정수의 합이 특정 값이 되도록 하는 경로의 개수를 세려고 한다. 경로가 꼭 루트에서 시작해서 말단 노드에서 끝날 필요는 없지만 반드시 아래로 내려가야 한다. 즉, 부모 노드에서 자식 노드로만 움직일 수 있다. 알고리즘을 어떻게 설계할 것인가? 1. Brute Force 모든 노드에 대해 해당 노드가 시작점이 되는 경로가 존재하는지 확인 한다. 한 노드를 시작점으로 잡는다. 시작점에서 깊이 우선 탐색을 이용해 탐색하며, 시작점에서 각 노드까지의 합을 기록한다. 합이 특정 값이 되는 노드의 갯수를 샌다. 모든 노드에 대해 반복한 후 그 수 모두 더해 반환한다. 2. 트리를 한번만 순회하는 방법 각 노드가 자신의 부모들로 부터 자신까지 더..
[코딩인터뷰 완전정복] 4.11 임의의 노드 Q : 이진 트리 클래스를 바닥부터 구현하려고 한다. 노드의 삽입, 검색, 삭제 뿐만 아니라 임의의 노드를 반환하는 getRandomNode() 메서드도 구현한다. 모든 노드를 같은 확률로 선택해주는 getRandomNode() 메서드를 설계하고 구현하라. 또한 나머지 메서드는 어떻게 구현할지 설명하라. 구현 요소 : 노드 노드의 삽입 노드의 검색 노드의 삭제 getRandomNode() -> 임의의 노드를 선택하여 반환해준다. 모든 노드가 같은 확률로 선택된다. Node.h 보기 // node.h template class TreeNode{ public: T data; TreeNode* parent; TreeNode* left; TreeNode* right; TreeNode(T data) { this-..