C++ (85) 썸네일형 리스트형 [C++] 우선순위큐에서 Compare 함수객체 사용 시 true면 우선순위가 낮아진다. std::sort()의 Compare 의미: sort(vec.begin(), vec.end(), Compare); 여기서 Compare(a, b)가 true이면 → a가 b보다 앞에 와야 한다즉, a → true 리턴하면 a가 앞쪽 (우선순위 높음)priority_queue의 Compare 의미:priority_queue여기서 Compare(a, b)가 true이면 → a가 b보다 낮은 우선순위→ a가 뒤로 밀리고, b가 top으로 올라감즉, Compare는 사실상 a 큰 값을 앞으로 오게 해주는 max-heap을 만들기 때문 [C++] 클래스명 객체명();는 디폴트 생성자를 호출하지 않는다. 클래스명 객체명(인수)는 클래스에서 매개변수 하나를 인자로 받는 생성자를 호출한다. 두개도 세개도 마찬가지이다. 그렇다면 인수를 넣지 않고 빈괄호만 쓰면 디폴트 생성자를 호출할까? A a; // A의 디폴트 생성자 호출 A a(); // A의 디폴트 생성자 호출 X ① Position Here; ② Position Here=Position(); ③ Position *pPos=new Position; ④ Position *pPos=new Position(); ⑤ Position Here(); 1~5번중 5번만이 디폴트 생성자를 호출하지 않는다. 5번은 Position 타입을 반환하는 Here이라는 이름의 함수 원형을 선언한 것이다. int형으로 바꿔 생각하면 이해하기 쉽다. int func; // 변수 i.. [C++] memset으로 배열 초기화 시 0,-1으로만 초기화 가능 memset은 배열을 초기화할 때 자주 사용하는 함수이다. 그런데 0이나 -1이 아닌 다른 숫자로 초기화를 하면 엉뚱한 값으로 채워진다. 왜냐하면 memset은 value값을 unsigned char로 바꿔서 다루기 때문에 우리가 의도했던 것과 달라진다. memset(arr,1,sizeof(arr))로 1로 초기화하려 했지만 int가 아닌 unsigend char로 바꿔서 1바이트마다 1이 들어가기 때문에 전혀 다른 값으로 채워진다. 0,-1이 아닌 특정 값으로 배열을 채우고 싶다면 std::fill이나 std::fill_n을 사용하자. [C++] 매개변수로 이중포인터를 사용해야 할 경우 void allocWithPoint(int* _p) { _p = new int(3); delete_p; } int main() { int* p = nullptr; allocWitPoint(p); cout [C++] 우선 순위 큐 정렬 방법 변경 우선순위 큐는 기본적으로 내림차순으로 정렬한다. priority_queue pq; priority_queue; 평소에 두번째 줄로 많이 이용했는데 첫번째 줄이 우선순위 큐의 원형이다. 내부 컨테이너는 힙을 이용하기 때문에 compare 디폴트는 내림차순 정렬을 하는 비교 함수이다. T자리에 pair가 들어가면 디폴트로 첫번째 인자 기준 내림차순, 같다면 두번째 인자 기준 내림차순으로 정렬한다. priority_queue pq; priority_queueb; } }; 구조체를 이용해 우선순위 큐를 어떻게 정렬할지 커스텀으로 만들 수 있다. 우선순위 큐는 힙 구조인데 a는 부모노드이고 b는 자식노드이다. a가 b보다 클 경우 true를 반환하고 swap한다. 이 행위를 swap이 일어나지 않을 때까지 반복해.. [C++] 부동 소수점 부동 소수점은 컴퓨터가 실수를 저장하는 방식이다. 부호: 부호는 0이 양수, 1이 음수이다. 지수부: 위에서는 직관적인 이해를 위해 10의 거듭제곱을 곱하는데 실제로는 2의 거듭제곱으로 지수를 표현한다. 지수를 n이라고 했을 때 가수부에 2^n이 곱해지고 음수 지수도 표현해야 하므로 부호를 가져야 한다. 부호파트는 따로 쓰지 않고 127의 바이어스를 적용해 0~255까지의 범위를 가지는 지수에 127씩 빼준다. 가수부: 같은 수를 표현하는 방법이 여럿 존재하면 두 변수의 상등 비교 연산을 하기 까다롭기 때문에 가수의 정수부를 한자리로 제한하는 정규화를 한다. (ex 1.2345 ,1.23) 가수도 1~2 사이의 수로 제한되어 항상 1.~~의 형태를 띄게 된다. (마찬가지로 정규화 규칙) 그래서 규칙때문에.. [C++] 포인터 비트 단위 이해 short sArr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int* pI = (int*)sArr; int iData = *((short*)(pI + 2)); cout [C++] 전역 변수, 정적 변수, 외부 변수 전역 변수 전역 변수는 함수 밖에 선언된 변수이다. 이름대로 전역에 영향을 끼치기 때문에 #include로 포함한 헤더파일의 같은 이름의 전역 변수가 있다면 중복 처리가 되어 링크 과정에서 오류가 발생한다. 정적 변수(static) 정적 변수는 말 그대로 정적이어서 본인의 영역에서 움직이지 않는다. 전역 변수처럼 다른 파일에 영향을 끼치지 않고 전역 변수가 선언된 파일에만 영향을 끼친다. 그러므로 전역 변수처럼 중복 때문에 오류가 발생하지 않는다. 그리고 함수 내부에서 선언하면 그 함수 안에서만 사용할 수 있지만 데이터 영역에 저장되어 함수의 호출 스택이 종료되어도 데이터 영역에 데이터가 남는다. 그렇다면 전역 변수를 쓰면 되지 무엇 때문에 정적 변수를 쓰는걸까? 아이러니하게도 함수 내부에서만 사용할 수.. 이전 1 2 3 4 ··· 11 다음