목록전체 글 (162)
개발하는 리프터 꽃게맨입니다.

[ 목차 ] 1. 개요 1) 개요 리스트, 큐, 스택, 배열과 같은 자료구조를 선형 자료 구조라고 부릅니다. 데이터들을 연속적으로 접근할 수 있는 것이죠. 근데, 예를 들어 가족의 가계도, 회사의 조직도, 컴퓨터의 디렉터리 등에 대한 자료구조를 어떻게 표현하면 좋을까요? 이 경우에 사용하는 것이 트리(tree) 계층적 자료 구조입니다. 트리 구조는 마치 나무를 거꾸로 뒤집을 형태라고 그렇게 부릅니다. 가장 최상단 노드를 루트노드라고 부르며, 루트의 아래로 작은 트리들이 재귀적으로 정의되는 것을 기본 구조로 합니다. 2) 용어 트리는 한 개 이상의 노드로 이루어진 유한 집합입니다. 트리에서 최상위 노드를 루트 노드 한 노드에서 뻗어 나오는 노드들을 자식 노드 그 반대를 부모 노드라고 합니다. 2의 경우 7..

[ 목차 ] 개요 1. 리스트란? 리스트는 자료를 정리하는 방법 중 하나입니다. 항목이 '연속적으로' 저장되어 있는 자료구조의 가장 기본적인 한 형태라고 할 수 있죠. 대부분의 언어에서 기본적으로 제공하는 '배열' 역시 '리스트'의 한 종류 입니다 그리고 '리스트'를 구현하는 방법이 하나 더 있는데, 그것이 연결 리스트입니다. 2. 연결리스트 연결리스트는 노드라는 데이터 단위가 존재하고, 노드 내부에는 데이터가 연결되는 데이터 영역, 그리고 다른 노드를 가리키는 링크 영역이 존재합니다. 저장하고 싶은 데이터를 데이터 영역에 저장하고, 링크 영역에서 링크라는 연결이 다른 노드를 가리킵니다. 이런 방식으로 메모리가 링크라는 줄로 연결된 상태입니다. 이런 링크라는 표현은 다른 여러 가지의 자료구조를 구현하는데..

필요해서 직접 만든 STL 호환 '크기 고정 벡터'입니다. '동적 배열'을 사용하지 않고 굳이 fixed_vector라는 고정길이 벡터를 만든 이유는 기존 '동적 배열'은 매우 뛰어난 자료구조이지만 몇 가지 문제점이 있습니다. 1) 힙 메모리를 사용하기 때문에 스택 메모리에 비해 조금 느리다. 2) 재할당 발생 시 O(n)의 시간복잡도가 소모된다. (초기화시 큰 reserve 를 할당하면 해결 가능) 3) 잦은 재할당 발생시 메모리 파편화 현상이 문제가 될 수 있다. 그렇기 때문에 굳이 동적 배열이 필요하지 않은 경우에는 일반 '배열'을 사용하는 것이 더 유리할 경우가 있습니다. 그냥 배열을 쓰지 않고 fixed_vector를 만든 이유는 필요시 편리한 기능이나 오류 체크 같은 것을 하기 위함이고 최적화..

[ 목차 ] 1. 람다 표현식 C++에서는 '호출할 수 있는 객체'를 callable이라고 말합니다. 그 종류는 총 5개 1) std::function 2) 함수 포인터 3) operator() 4) bind에서 나온 타입 (아직 다루지 않은 내용) 그리고 lambda 람다식입니다. 새로운 '호출성 객체'라고 하죠, 람다는 다른 언어에서는 익명함수, 무명함수라고 말하며 기능적으로는 '재활용하지 않는 일회용 함수'라고 말합니다. 이름이 없고, 필요할 때 딱 만들어서 쓰고 버리는 함수라고 할 수 있죠. 예시는 아래와 같습니다. 즉석 해서 함수를 정의한다고 보면 되겠습니다. 이런 식으로 람다 변수로 초기화해서 호출하는 방법도 있고, 바로 호출하고 버리는 방법도 있고, 매개변수로 넘기는 방법도 있습니다. 더 다..

[ 목차 ] 이전 포스팅 https://powerclabman.tistory.com/48#6._%EB%A7%88%EC%B9%98%EB%A9%B0 [C++] 스마트 포인터 - 1 (unique_ptr, unique_ptr 역설계) [ 목차 ] 1. 동적 메모리 C++에서 동적 메모리는 new로 할당하고 delete로 해제합니다. new는 객체를 할당하고 초기화하여 그 객체에 대한 포인터를 반환하고 delete는 소멸하며 할당한 메모리를 해제하 powerclabman.tistory.com 따로 복습을 위한 서술은 없습니다. 1. shared_ptr shared_ptr 은 본격적으로 자동 메모리 관리를 하기위한 포인터입니다. 내부에는 ptr 과 control_block 이 존재하고, ptr은 객체를 참조하기위..