C++ 7일차 - 1

JUSTICE_DER·2023년 2월 9일
0

C++

목록 보기
10/20

C++의 클래스와 구조체에는 이미 정의된 기능들이 존재한다.
그 중 하나는
대입연산자에 대한 기능으로,
같은 자료형으로 c2 = c1을 한다면,
자동으로 해당 멤버에 값들이 각각 대입이 된다.

추가로, 복사자(복사생성자)라는 것이 존재하는데,
객체의 생성과 동시에, 대입연산을 하면 동작한다.
Mystr str2 = str1
해당 객체를 만들고, 해당 객체에 값을 대입연산하는 것이다.

내부클래스는 외부클래스의 private 멤버에 접근이 가능하다.
하지만 외부클래스는 내부클래스의 private 멤버에 접근할 수 없다.

이런 상황 때문에 friend라는 예약어가 존재하는데,
승인하는 쪽에서 friend class _Outerclass friend선언을 해야한다.


cpp Vector에 대해 세부정리된 사이트

vector라는 가변배열서
insert와 erase의 사용은 주의해야한다.
해당 인덱스 기점으로 뒤의 데이터가 모두 밀리거나, 모두 당겨지기 때문.
erase를 하면, 안전한 다음 인덱스의 주소를 전달해주는 기능을 수행.


헤더의 템플릿에서 멤버함수를 자동완성하면, inline이라는 키워드가 붙는다.

호출하는 쪽에 해당 함수코드를 그대로 붙여넣겠다는 의미이고,
호출비용을 줄이기 위해 쓰인다.

컴파일러는 inline이 붙었다고 무조건 코드를 복붙하는 것은 아니고,
판단하에 자주 호출되고, 코드의 길이가 짧은 것을 위주로 동작한다.


iterator 정리 사이트1
iterator 정리 사이트2


트리라는 자료구조는
정점과 간선으로 이루어진 그래프의 일종으로,
순회가 불가능한 그래프에 속하며,
계층관계를 표현하는데 특화된 그래프이다.

트리 중, 이진탐색트리(BST)라는 것은,
이진탐색을 용이하게 하기위해 고안된 트리로,
값이 작으면 왼쪽, 크면 오른쪽으로 값을 정렬해두는 트리이다.
이진탐색은 자료가 정렬되어있어야만 사용이 가능하므로

logN으로 반씩 줄여서 값을 탐색할 수 있고,
탐색해야만 어디에 해당 값이 입력되어야하는지 알 수 있으므로 logN의 입력시간이 걸린다.

이진탐색트리에도 문제점이 존재한다.
루트노드가 가장 작은값이라는 최악의 상황이라면,
이진탐색을 하는 의미가 아예 없어지게 된다.

그래서 고안된 것이
AVL, RED-BLACK 트리다.

값이 추가됨에 따라 Self-Balanced함수가 호출되어
루트노드를 유동적으로 변경하여 좌우의 균형을 맞춘다.

C++에서 해당 자료구조를 구현한 것이
map이라는 자료구조이고, (set은 잘 사용하지 않는다)
RED BLACK트리에 해당한다.

map<int, float> mapData;

map은 first, second 자료형을 입력해주어야하며,
각각 key, value 값의 자료형을 의미한다.

mapData.insert(make_pair(L"아이유", st1)); 
//반드시 make_pair로 짝을 맞춰서 넣어줘야함

그리고 map에는 반드시 key-value가 pair한 상태로 들어가야만 한다.

map<const wchar_t*, stdInfo>::iterator mapiter;
mapiter = mapData.find(L"아이유"); 

그리고 위처럼 find를 하면, 값에 접근할 수 있는데
iterator를 반환한다.

mapiter->first;
mapiter->second;

그래서 위처럼 -> 를 사용하여
first라는 key값, second라는 실제값에 접근이 가능하다.
그냥 mapiter가 가지고 있는 주소는 pair에 대한 주소이고, (*mapiter)를 하면 pair형의 값이 나온다.
6-2일차의 주석부분을 보면 이해가 완벽히 된다.

iterator의 end()함수를 사용하면, 끝의 원소가 아니라,
끝 다음의 아무 의미없는 공간을 가리키고 있는 것이었으며,
map.find()라는 함수를 실행하고, 해당 키값이 없다면,
이터레이터의 end()가 가리키는,
즉 map의 맨 마지막 원소의 바로 다음번 의미없는 주소를 반환한다.
이를 이용하여 if문 논리로 사용이 가능

여기까지 복습을 마치고, 공부해 보자

profile
Time Waits for No One

0개의 댓글