reserve 함수 / static_cast 함수
reserve는 std::vector의 크기를 사전에 예약하여, 메모리 할당과 복사를 최소화하는 함수이다.
std::vector는 기본적으로 용량(capacity)이 부족할 때마다 새로운 메모리를 할당하고 기존 데이터를 복사한다. 이를 reallocation이라 하며, 이는 성능 저하를 유발할 수 있다.
그래서 reserve를 통해 백터의 예상 크기를 미리 설정하여 불필요한 메모리 재할당을 줄여 성능을 향상 시킬 수 있다.
static_cast<type>(value)는 C++에서 타입을 명시적으로 변환하는데 사용되는 연산자이다.
이는 컴파일 시간에 타입 변환을 검증하고, 안전하고 효율적인 방식으로 변환을 수행한다.
- 컴파일 타임 체크: 타입 변환의 유효성을 컴파일러가 확인하여, 잘못된 변환을 방지한다.
- 안정성: 불필요한 변환이나 위험한 캐스팅(reinterpret_cast)과 달리, 특정 변환만 허용한다.
- 가독성: 코드에서 의도한 변환을 명확히 보여준다.
log10으로 자릿수 구하기
먼저 log에 대해 알아보자.
수학적으로 표현하면 어떤 숫자 x가 10의 몇 제곱인지 알려주는 함수인 것이다. log7(343)을 한다면 7을 3번 곱해야 343이 되기 때문에 y의 값은 3이 된다.
C++ 에서는 <cmath> 헤더 파일에서 log10을 제공한다.
log10 함수는 하드웨어와 소프트웨어에서 매우 최적화되어 있고, 입력 값의 크기와 상관없이 상수시간 O(1)에 실행된다.
이는 반복문이나 기타 직접적인 계산 방법보다 빠르다.
log10의 활용은 자리수 계산을 할 때 유용하다. 자리수 = log10(x) + 1
이로써 빠르고 간결하게 계산이 가능하고, 입력 값이 0일 경우엔 추가 처리가 필요하다.
powl 거듭 제곱 함수
어제 제곱근 함수인 sqrt에 대해 알아보았는데, 오늘은 이에 더해 거듭 제곱 함수인 powl에 대해 알아보자.
powl도 sqrt와 마찬가지로 cmath에서 제공하는 함수이며, 높은 정밀도를 제공한다.
기본 문법: long double powl(long double base, long double exp);
여기서 base는 거듭제곱의 밑수를 의미하고, exp는 거듭제곱할 지수를 의미한다.
대체로 pow와 동일하지만, pow는 double로 동작하고, powl은 long double로 동작하기 때문에 정밀도가 중요한 경우에 사용한다.
입력 값 n의 범위가 매우 큼으로 정밀도가 중요한 상황이고 powl을 사용하면 부동소수점 연산에서 발생할 수 있는 오차를 줄일 수 있다. 그래서 일반적으로 정밀한 계산이 필요한 경우엔, powl이 적합하다.
위 문제에서 n값의 제곱근이 있는지 여부를 확인하기 위해, n의 제곱근을 구한 후, powl 함수로 다시 한 번 제곱근이 맞는지 확인 후 계산 값을 리턴하였다.
std::sort 함수
std::sort 함수는 STL의 정렬 함수로, 배열 또는 컨테이너의 요소들을 정렬하는데 사용된다.
이 함수는 <algorithm> 헤더에 정의되어있다.
#include <algorithm>
std::sort(시작_반복자, 끝_반복자, 비교_함수);
기본 정렬 기준은 내부적으로 std::less<>를 사용하여 작은 값이 먼저 오도록 오름차순 정렬이 되어있다.
그 밖에 std::greater<>는 내림차순을 의미하고 사용자 정의 함수 혹은 람다 표현식을 사용해서 여러 조건들을 정렬 기준으로 만들어주는 등 커스텀을 할 수 있다.
'내배캠 > TIL' 카테고리의 다른 글
24.12.09 (월) (0) | 2024.12.09 |
---|---|
24.12.06 (금) (0) | 2024.12.06 |
24.12.04 (수) (0) | 2024.12.04 |
24.12.03 (화) (0) | 2024.12.03 |
24.12.02 (월) (0) | 2024.12.02 |