분류 전체보기(58)
-
nested class, types..
c++ 에서 내포 클래스를 이용해보자 #include using namespace std; class A { public: enum class DAYS { MONDAY, TUESDAY, WEDNESDAY }; struct InnerStruct{}; class InnerClass{}; private: DAYS m_day; public: A(DAYS day) : m_day(day) {} DAYS getDay() { return m_day; } }; int main() { A today(A::DAYS::MONDAY); cout
2023.07.09 -
l-value, r-value
l-value(왼값)와 r-value(오른값)는 C++에서 표현식(expression)을 구성하는 토큰(token) 중 하나로, 변수나 객체, 그리고 리터럴 상수 등이 해당됩니다. l-value는 메모리에 저장된 데이터에 대한 주소값으로서, 변수, 배열, 구조체 등의 이름, 객체의 멤버 등이 해당됩니다. 쉽게 말해 l-value는 주소값이 존재하며, 해당 주소값을 참조할 수 있는 식별자를 뜻합니다. 예를 들어, "a = b"와 같은 코드에서 "a"와 "b"는 l-value입니다. r-value는 값을 나타내며, 변수나 객체가 아니라 상수, 리터럴 값, 값에 대한 계산식 등이 해당됩니다. 쉽게 말해, r-value는 주소값이 아니라 값 그 자체를 뜻합니다. 예를 들어, "a = 1 + 2"와 같은 코드에서..
2023.07.09 -
익명 객체
익명객체는 단순한 함수 하나만 이용하는 클래스가 있을 경우 쓰고 버리는 느낌으로 이용하는 객체를 쓸 때 이용한다. 익명객체는 생성 후 하나의 함수 실행 후 쓰지 않는 일회성이기 때문에 소멸자와 같이 이용한다. 그래서 매번 다른 주소를 갖는 수행을 하게 된다. #include using namespace std; class A { public: int m_value; A(const int& input) :m_value(input) { cout
2023.07.09 -
static 관련 정리
static은 한번 메모리가 선언되면 data영역에 저장되며 이것은 프로그램과 lifetime을 같이 한다는 것을 알 수 있다. 함수가 여러 번 호출되어도 이미 존재하는 영역에 접근하여 처리를 해주므로 메모리 측면에서 효율적이다. 즉 값이 보존되며 계속해서 쓸 수 있다. coroutines의 구현에 도움이 된다. coroutine이란 기존의 caller callee구조인 함수를 한번 호출하면 stack에 올려서 return을 받아오는 구조에서 caller와 coroutine 사이에서 만약 coroutine에서 suspend를 한다면 현재 coroutine state를 heap영역에 저장하여 보관해뒀다가 caller에서 resume을 하게 되면 heap에서 저장된 state를 가져와서 다시 coroutin..
2023.07.09 -
union-find
union and find는 여러 개의 원소가 존재하고 특정 원소가 어떤 집합에 속해있는지 확인할 때, 집합끼리 연결해줄 때 이용하는 자료구조이다. 처음에 아무것도 연결이 안되어 있을 때 uf 배열은 부모노드의 번호를 가리키고 있다. uf[1] = 3, uf[5] = 6 으로 해주었을 때 부모 노드가 바뀌게 된다. 만약 union(5,1)로 서로 자기 자신이 아닌 부모 노드가 존재할 때는 find 함수를 써야한다. find 함수를 써서 uf[x] = x 인경우까지 찾아줘야 한다. 그리고 나온 값들로 union을 하게 된다. find(5) => 6 -> find(6) => 6 이므로 멈춘다 , find(1) => 3 find(3) => 3 멈춘다 그리고 -> union(6,3) 을 하게 된다. find(x..
2023.05.11 -
heap
heap은 우선순위 큐 같은 곳에서 최대값이나 최솟값을 빠르게 찾아낼 때 쓰이는 알고리즘이다. 자료구조는 트리를 이용한다. max-heap은 최댓값이 무엇인지만 알 수 있고 나머지 값들은 어떤지 모른다. heap을 만들 때 heapify라는 과정을 거친다. 이 수를 heap 정렬을 이용하게 되면 이걸로 트리를 만들어본다. 트리는 배열 및 리스트로 구현이 가능하다. 배열로 구현할 시에는 맨 위의 root는 0이 되고 왼쪽 자식 노드는 0 * 2 + 1로 오른쪽 자식 노드는 0 * 2 + 2로 접근하게 된다. 가장 큰 노드가 맨 위로 오게 하는 것이 max heap의 목적이다. 그러므로 root와 왼쪽, 오른쪽을 비교하고 만약 자식이 더 크다면 현재의 노드와 자식 노드의 값과 교환한다. 그리고 가장 큰 곳의..
2023.05.07