728x90
반응형
SMALL

Modern C++ 13

[C++] Universal Reference

오늘 알아볼 내용은 Universal Reference이다. 지난번에는 R Value Reference에 대해서 공부했다. L Value는 저장되고 있는 값이고, R Value는 저장되지 않는 임시적인 값을 의미하고, 대표적인 예로는 상수, 함수의 리턴 값이 있다. 이런 R Value의 Reference는 &&연산자를 사용하여 참조하는데, C++ 11에서 약간 특이한 사항으로 R Value인지 L Value인지 추론을 해야 하는 경우가 생긴다. 이런 특이한 reference를 Universal Reference라고 부른다. 만약 추론을 할 필요가 없을 경우, &&는 그냥 R Value Reference라고 볼 수 있다. Universal Reference를 이용하려면 타입의 추론이 있어야 한다고 했다. ..

Modern C++ 2021.09.27

[C++] Thread

이전에 프로세스와 쓰레드에 대해 다룬 적이 있다. 오늘 다뤄볼 내용은 쓰레드가 C++ 에서 어떻게 사용하는지에 대해 좀 알아봐야겠다. 이것도 사실 모 기업 필기 테스트에서 나왔는데, Thread를 AfxBeginthread를 써서 만들어 본 적은 있지만, Modern C++로 사용해 본 적이 없어서 쓰레드 코드에 대한 이해가 1도 없는 채로 문제를 풀었다. 우선 C++ 에서 Thread는 std::thread를 보면 될 것 같다. 오늘은 간단하게 쓰레드를 어떻게 선언하고 어떻게 동작시키는지에 대해 알아보자. 선언 자체는 간단하다. 다음과 같이 선언하면 된다. Func1과 Func2 모두 k를 받아서 더하면서 출력하는 코드이다. 실행 결과를 보면 다음과 같다. 보다시피 순서가 지 꼴리는대로 진행된다. 분명..

Modern C++ 2021.09.20

[C++] R Value 참조와 Move Semantics

오늘 알아볼 내용은 R Value 참조(R Value Reference)와 Move Semantic이다. 우선 간단히 L Value와 R Value가 무엇인지 살펴보면 다음과 같다. LValue : 단일식 이후에도 없어지지 않고 지속되는 객체 ex) 변수 RValue : 표현식이 종료된 후 더 이상 존재하지 않는 임시적인 값 ex) 상수, 함수의 반환 값 말로 하면 역시 이해가 안간다. 코드로 쳐 보는게 가장 좋은 방법이다. 자 에러가 뜨는 곳을 잘 확인해보자. 우선, &연산자는 L Value Reference이므로, 다음(++x)과 같이 썼을 때 컴파일 에러가 난다. 그 이유는, x++는 L Value가 아니라, R Value이기 때문이다. 왜 R Value인가? x++의 경우는 x가 증가되기 전의 복..

Modern C++ 2021.09.11

[C++] Priority Queue - 우선순위 큐

오늘 공부해 볼 자료구조는 우선순위 큐이다. 우선순위 큐는 어디서 사용되는가? - 시뮬레이션 시스템 - 네트워크 트래픽 제어 - 운영체제에서의 작업 스케쥴링 - 수치 해석적 계산 우선 큐(Queue)라는 자료구조는 FIFO(First In First Out) 구조로 먼저 들어온 데이터가 먼저 나오는 구조이다. 이와 달리 우선순위 큐는 들어간 순서와 상관없이 우선순위가 높은 데이터가 먼저 나오는 것을 말한다. 보통 우선순위 큐는 힙(Heap)으로 구현된다. 힙(Heap) - 완전 이진 트리의 일종으로 우선순위 큐를 위해 만들어진 자료구조 - 여러 개의 값들 중에 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조 - 힙은 중복 값을 허용함.' 힙의 종류 - 최대 힙 : 부모 노드의 키 값이 자식 노드보..

Modern C++ 2021.08.19

[C++] Iterator

오늘 알아볼 것은 Iterator(반복자)다. 반복자란? - 컨테이너의 요소를 가리키는 포인터라고 할 수 있다. 간단한 예로 list를 한번 보자. 나는 int형 리스트 l을 선언하고, l에 1,2,3을 차례대로 삽입했다. 그리고, iter에 l의 맨 처음 요소를 삽입해주었고, 이 iter은 결국 1이라는 값을 출력할 것이다. 이런 식으로 반복자를 간단하게 생각하면 그냥 컨테이너의 요소를 가리키는 포인터라고 생각할 수 있다. 여기서 iter에 1을 더하면 그 다음 인자인 2로 넘어간다. 반복자 설명 생성되는 방식 읽기 접근 쓰기 증감 비교 입력 반복자 (Input Iterator) 읽기만 가능, 순방향 이동 istream_iterator =*p -> ++ == != 출력 반복자 (Output Iterat..

Modern C++ 2021.08.16

[C++] 상속

오늘 알아볼 것은 상속 개념이다. 사실 C++기초를 공부했던게 워낙 옛날이라서 프로젝트를 진행하면서 상속에 대한 개념이 조금 부족했다. 그래서 다시한번 상기시켜보자는 의미로 정리를 한번 해보려고 한다. 상속이란? - 한 클래스가 다른 클래스에서 정의된 속성(변수, 함수)를 이어받아 사용 - 이미 정의된 클래스를 바탕으로 필요한 기능을 추가하여 정의 라고 단순하게 말할 수 있다. 상속의 장점? - 중복된 코드를 부모에서 구현하여 중복을 제거할 수 있다. - 상속을 통해 자식 클래스에서 부모가 가지고 있지 않은 기능을 구현할 수 있다. - 다형성을 활용한 객체 지향적 디자인 다형성이란? - 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미함. 이 다형성이라는게 사실 처음에 C++을 공부하면서 도대체 ..

Modern C++ 2021.08.15

[C++] Container - Map

List에 이어 이번에 알아볼 Container는 Map이다. Map의 자료구조는 Red Black Tree이다. 이는 자가 균형 이진트리로써, 삽입과 삭제가 일어나는 경우 자동으로 그 높이를 작게 유지해주는 이진트리이다. 꽤나 어려운 내용이므로, 코드를 직접 구현하기 보다는 STL Library를 살펴보는 것이 나을 것 같다. 먼저 map의 기본 형태는 다음과 같다. map : Key-Value Type > Key와 Value가 쌍으로 저장되는 형태를 띄며, Key값을 이용하여 Value값을 찾을 수 있다. 이런 형태를 사실 파이썬에서는 Dictionary라는 자료형으로 사용하고 있다. Map은 다음과 같이 사용한다. key의 자료형을 string, value의 자료형을 int로 놓고 사용한 예이다. ..

Modern C++ 2021.07.20

[C++] Container - List

저번에 알아봤던 vector에 이어 오늘은 list에 대하여 알아보자. 우선, list는 자료구조 시간에 배웠던 Linked List이다. Linked List(연결 리스트)? 우리는 앞서 배열이 연속된 메모리 공간을 할당 받는다는 사실을 공부했다. 그럼 List는 어떨까? List의 경우 연속된 공간으로 메모리 공간을 할당받지 않는다. 즉, 메모리에 접근하기 위해서 인덱스 값을 가지고 접근할 수 없다. 그러면 어떻게 되어 있을까? 대략 이런 구조로 되어 있다. 그림이 개판이긴 하지만, 현재 List는 양방향 연결리스트를 표현 한 것이다. 리스트를 처음본 사람들은 이해할 수 없을 것이다. 그 이유는, "어라? 앞서 배운 배열과 달리 접근하려면 인덱스가 아닌 현재 객체의 다음 객체를 가리키는 포인터를 이용..

Modern C++ 2021.07.19

[C++] Container - array, vector

이제부터 알아볼 것은 Modern C++에서 제공되는 Container에 대하여 알아볼 것이다. 어떤 Container가 있고, 어떤 특징을 가지는가?? 순서 컨테이너(Sequence Container) - 모든 요소를 특정 위치에 저장한 순서가 있는 모음 - 위치는 삽입한 시점과 위치에 따라 달라지며, 요소의 값과는 독립적 관계를 가짐. - 대체로 배열 또는 연결 리스트로 구현. > 종류 : array, vector, deque, list 연관 컨테이너(Associate Container) - 요소의 위치가 자신의 값과 특정 정렬 기준에 따라 정해지는 정렬 모음. - 삽입한 순서는 중요하지 않음. 오로지 요소의 값에 의해 순서가 결정. - 대체로 이진트리로 구현. > 종류 : set, multi_set..

Modern C++ 2021.07.18

[C++] SmartPointer - weak_ptr

저번 시간에 공부했던 unique_ptr, shared_ptr에 이어서 오늘은 weak_ptr에 대하여 공부해 보도록 한다. shared_ptr에서는 자신이 참조하고 있는 객체(메모리 주소)에 대해 reference counting을 함으로써, 객체의 수명에 직접적으로 관여한다. shared_ptr 객체 하나가 소멸되더라도, 동일한 메모리 주소를 참조하고 있는 다른 shared_ptr 객체가 있으면 참조하고 있던 메모리 주소의 객체는 소멸되지 않는다. - 저번 시간에 공부했던 순환참조의 내용이다. 이 순환참조를 해결하기 위해 나온 녀석이 weak_ptr이다. weak_ptr은 하나 이상의 shared_ptr 인스턴스가 소유하는 객체에 대한 접근은 제공하지만, 소유자의 수에는 포함되지 않는 스마트포인터다...

Modern C++ 2021.07.16
728x90
반응형
LIST