개발 공부/코딩 공부

c++ <limits>, const &auto

baby-t 2025. 9. 3. 16:10

1. 미리 최대값 최소값 설정 법

 

<limits> 헤더 파일을 포함하면 사용할 수 있으며, 숫자 타입을 다룰 때 매우 유용합니다.


### 주요 특징과 사용법

numeric_limits는 템플릿 클래스로 구현되어 있어, 알고 싶은 자료형을 템플릿 인자로 지정하여 사용합니다.

std::numeric_limits<자료형>::함수() 형태로 호출합니다.

## 가장 많이 사용하는 함수

  1. max(): 최댓값
    • 해당 자료형이 표현할 수 있는 가장 큰 값을 반환합니다.
    • 예시: int의 최댓값을 찾을 때 사용합니다. (약 21억)
  2. min(): 최솟값
    • 해당 자료형이 표현할 수 있는 가장 작은 값을 반환합니다.
    • 주의: 부동 소수점 타입(float, double)에서는 **'가장 작은 양수'**를 의미하고, 정수 타입(int, long long)에서는 **'가장 작은 음수'**를 의미합니다.
  3. lowest(): 가장 낮은 값
    • 모든 자료형에서 공통적으로 **가장 작은 값(음수 포함)**을 반환합니다. min()이 헷갈릴 때 lowest()를 사용하면 명확하게 가장 낮은 값을 얻을 수 있습니다.

ex) int min_val = numeric_limits<int>::max();

 

2. auto 말고 const auto& 사용 이유

 

 

const auto&를 사용하는 이유는 성능안전성을 모두 챙기기 위해서입니다.

간단히 말해, &는 불필요한 복사를 막아 성능을 높이고, const는 원본 데이터를 실수로 변경하는 것을 막아 안전성을 높입니다.


### 단계별 비교

for 루프에서 세 가지 방식을 비교해 보면 차이가 명확해집니다.

#### 1. for (auto query : queries): 복사 (Copy)

  • 동작 방식: queries 벡터의 각 요소를 하나씩 복사해서 query라는 새로운 변수를 만듭니다.
  • 장점: query를 루프 안에서 마음대로 수정해도 원본 queries에는 아무런 영향이 없습니다.
  • 단점: queries의 요소가 크거나 복잡할 경우(예: 긴 문자열이나 다른 벡터), 매번 복사하는 데 드는 비용(시간과 메모리)이 커져 성능이 저하될 수 있습니다.
  • 비유: 앨범의 사진을 한 장씩 복사해서 보는 것과 같습니다. 복사본에 낙서해도 원본은 안전하지만, 복사하는 데 시간과 잉크가 듭니다.

#### 2. for (auto& query : queries): 참조 (Reference)

  • 동작 방식: query는 queries 벡터에 있는 **원본 요소의 또 다른 이름(별명)**이 됩니다. 복사가 일어나지 않습니다.
  • 장점: 복사가 없으므로 매우 빠르고 효율적입니다.
  • 단점: query를 수정하면 원본 queries의 요소가 직접 변경됩니다. 의도한 것이 아니라면 심각한 버그를 유발할 수 있습니다.
  • 비유: 앨범에 있는 원본 사진을 직접 보는 것과 같습니다. 빠르지만, 실수로 펜을 떨어뜨리면 원본이 훼손됩니다.

#### 3. for (const auto& query : queries): 상수 참조 (Const Reference)

  • 동작 방식: &를 통해 복사 없이 원본을 참조하고, const를 통해 읽기만 가능하도록 제한합니다.
  • 장점:
    • 성능: 복사가 없으므로 빠릅니다. (참조 &의 장점)
    • 안전성: 원본을 수정할 수 없도록 컴파일러가 막아줍니다. (복사의 장점)
  • 단점: 루프 안에서 원본을 수정해야 하는 경우에는 사용할 수 없습니다.
  • 비유: 앨범의 원본 사진을 유리 액자에 넣어서 보는 것과 같습니다. 복사할 필요 없이 빠르면서도, 유리가 막아줘서 원본을 훼손할 걱정이 없습니다. 👍

'개발 공부 > 코딩 공부' 카테고리의 다른 글

C++ 람다식  (0) 2025.09.16
C++ 입출력  (0) 2025.09.15
프로그래머스 리스트 자르기  (0) 2025.09.13
복사와 함수 인자 전달 , 그리고 메모리  (0) 2025.09.03
간단한 수학 공식들  (1) 2025.09.01