LeetCode '200. Number of Islands' 를 아래와 같이 DFS 알고리즘으로 C++로 구현했을 때 parameter로 grid를 Call by Value인 vector> grid로 넘겨주면 48/49의 테스트 케이스가 통과되지만 마지막 1개의 테스트 케이스가 Time Limit Exceeded (TLE)로 통과를 못하게 된다. 아이디어 자체엔 문제가 없지만 Call by Value 즉, '&' 의 유무가 통과 유무를 좌우한다. // Wrong Solutionclass Solution {public: int numIslands(vector>& grid) { int m = grid.size(); int n = grid[0].size(); vect..
C++에서 map과 unordered_map의 주요 차이점은 elements를 저장하고 액세스하는 방식에 있으며, 이는 성능과 사용 시나리오의 차이로 이어진다. 순서에 신경을 쓴다면 map을 사용하고, 빈번한 key 기반 조회에 대한 성능 우선순위를 정하고 순서를 신경 쓰지 않는다면 일반적으로 unordered_map이 더 좋다. 기본 데이터 구조map: balanced binary search tree (일반적으로 Red-Black Tree)로 구현된다. elemets는 key를 기준으로 정렬된 순서로 저장된다. unordered_map : hash table을 사용해 구현된다. elements는 key에 따라 정렬되지 않고 hash values에 따라 임의의 순서로 저장된다.시간 복잡도map삽입, 삭..
C와 C++는 메모리 관리에 더 많은 제어 기능을 제공해 잠재적인 차이점을 제공하는 반면, Python은 이러한 세부 사항을 추상화해 일부 효율성을 희생하는 대신 개발을 간소화한다. C, C++ Low-Level Memory ManagementManual Memory Allocation (수동 메모리 할당)C: C에서는 malloc, calloc, realloc, free와 같은 함수를 사용해 메모리를 직접 관리한다.malloc(size_t size): 초기화 되지 않은 메모리의 크기(바이트)를 할당한다.calloc(size_t num, size_t size): num 요소 배열의 각 크기 바이트에 대한 메모리를 할당하고 모든 바이트를 0으로 초기화한다.realloc(void *ptr, size_t si..
일반적으로 C++(및 C)의 구현은 Python의 구현보다 더 빠른 경향이 있다. 그러나 모든 유형의 애플리케이션에서 성능 차이가 크지는 않다. 예를 들어, 개발 속도 및 유연성 측면에서 Python은 단순성과 풍부한 라이브러리 에코시스템으로 인해 신속한 개발 및 프로토타이핑에 선호되는 경우가 많다. IO-boun 애플리케이션의 경우 Python은 높은 수준의 추상화와 사용 편의성으로 인해 웹 서버, 데이터 처리 스크립트 등 IO 바인딩 애플리케이션에 매우 효율적일 수 있다. 요악하면, C++와 C는 일반적으로 컴파일된 특성과 낮은 수준의 제어로 인해 실행 시간이 빠르지만, Python은 사용 편의성과 빠른 개발 기능으로 인해 실행 속도는 느리지만 많은 애플리케이션에서 강력한 선택이 될 수 있다. 아래는..
CreateDialog() 함수는 대화 상장 템플리 리소스에서 모델리스 대화 상자(modeless dialog box)를 만드는 데 사용되는 Windows API의 일부다. 모델리스 대화 상자(modeless dialog box)는 사용자가 애플리케이션의 다른 창과 상호 작용하는 것을 차단하지 않는다. 이는 사용자가 애플리케이션의 다른 부분에 액세스하기 전에 대화 상자와 상호 작용하고 대화 상자를 닫아야 하는 모달 대화 상자(modal dialog box)와는 대조적이다. CreateDialog() 함수는 리소스 스크립트(.rc 파일) 또는 메모리에 정의된 대화 상자를 만드는 데 사용할 수 있다. 대화 상자는 레이아웃, 제어 요소(예: 버튼, 텍스트 상자 등) 및 기타 속성을 지정하는 템플릿을 기반으로 ..
Symbol Table은 컴파일러와 링커에서 사용하는 데이터 구조로, 프로그램에서 사용되는 식별자(변수 및 함수 이름 등) 목록과 유형, 범위(가시성), 메모리 위치 등 각 식별자에 대한 정보를 담고 있다. Symbol Table은 컴파일러와 링커가 프로그램 전체에서 이러한 식별자에 대한 참조를 해결하는 데 도움이 된다. 디버깅의 맥락에서 디버그 심볼 내의 Symbol Table은 디버거가 메모리 주소 및 기타 로우-레벨 정보를 사람이 읽을 수 있는 식별자에 다시 매핑하는 데 도움이 된다. 이 매핑을 통해 디버거는 변수 값을 표시하고, 코드 한 줄씩 단계별로 살펴보고, 기타 고급 디버깅 기능을 제공할 수 있다. 컴파일할 때 Symbol Table은 컴파일러가 각 함수와 변수가 어디에 정의 되어 있고 어떻..
Debugging Symbols은 컴파일 과정에서 프로그램의 바이너리에 추가되는 정보로, 바이너리 명령어를 원래 소스 코드에 다시 매핑하는 역할을 한다. 이러한 심볼에는 변수 이름, 함수 이름, 줄 번호와 같은 세부 정보가 포함된다. 디버거 및 기타 도구는 이를 통해 개발자에게 사람이 읽기 쉬운 형태의 프로그램을 표시해 프로그램의 동작을 분석하고 문제를 쉽게 식별할 수 있다. 아래와 같은 C++ 프로그램이 있다고 가정하자. // main.cpp #include void printMessage() { std::cout
포인터는 C와 C++를 비롯해 많은 프로그래밍 언어에서의 기본 개념으로, 메모리 주소에 직접 접근을 제공해 동적 메모리 관리르 가능하게 하며 기타 기능을 제공한다. 그러나 이러한 기능에는 잠재적인 함정이 있다. 포인터 사용의 장점과 단점을 알아보자. 1. 장점 동적 메모리 할당 : (malloc(), calloc(), new 등) 동적 메모리 할당이 가능하며, 이는 애플리케이션의 필요에 따라 런타임 중에 메모리를 할당할 수 있음을 의미한다. 이건은 linked list, tree, graph와 같은 많은 데이터 구조에 필수적이다. 효율성 - 추가로 다룰 예정 : 프로그램의 실행이 더 효율적으로 될 수 있다. 메모리에 직접 접근하면 (데이터를 복사하는 대신) 특정 작업을 더 빠르게 수행할 수 있다. 유연성..
C++은 Overloading과 함께 Overriding도 제공한다. overriding은 파생된 클래스에서 기존 클래스의 멤버 함수를 새로운 정의로 재정의하는 것을 말한다. overriding은 주로 inheritance(상속)과 polymorphism(다형성)을 구현할 때 사용된다. 기본 클래스의 함수를 override하려면, 해당 함수는 반드시 'virtual'로 선언돼야 하고, private 멤버 함수는 직접적으로 접근이 불가하다(간접적으로는 reference(참조)를 통해 override 가능). class Animal { public: virtual void sound() { std::cout
Java와 마찬가지로 C++역시 overloading을 제공한다. overloading은 같은 이름의 함수나 연산자를 여러 번 정의하지만, 매개변수의 유형이나 개수가 달라야 한다. 이를 통해 동일한 함수 이름을 사용해 다양한 데이터 유형에 대한 다양한 작업을 수행할 수 있다. 아래 예시를 살펴보자. 같은 'add'라는 이름을 갖지만 위에는 int에 대한 연산을, 아래는 double에 대한 연산을 수행한다. int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; }
- Total
- Today
- Yesterday
- 오블완
- Python
- 딕셔너리
- 이코노미스트
- Android
- 티스토리챌린지
- defaultdict
- Hash Map
- The Economist Espresso
- 머신 러닝
- ml
- 파이썬
- socket programming
- 투 포인터
- The Economist
- vertex shader
- I2C
- DICTIONARY
- 안드로이드
- tf-idf
- C++
- java
- join
- leetcode
- 이코노미스트 에스프레소
- 리트코드
- Computer Graphics
- 소켓 프로그래밍
- machine learning
- min heap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |