Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- Raspberry
- 아두이노
- buildroot
- avr-gcc
- STM32
- QEMU
- Visual Studio
- raspberrypi
- GPIO
- WPF
- 라즈베리파이
- Debugging
- Debug
- c#
- yocto
- C++
- AArch64
- 회로
- Linux
- esp32
- Arduino
- Visual Studio Code
- 디버깅
- UART
- atmel
- AVR
- vscode
- cpp
- bare metal
- nucleo
Archives
- Today
- Total
임베디드를 좋아하는 조금 특이한 개발자?
accumulate() 함수의 overflow 문제 해결 방법 본문
알고리즘 문제를 풀 때, 많은 사람들이 accumulate()함수를 자주 사용할 것으로 생각합니다.
하지만, 해당 함수를 사용할 때 overflow에 대한 문제가 발생하여 for문으로 직접 합을 구하는 경우도 있을 것입니다.
accumulate()함수의 선언을 확인해보면 문제를 해결할 수 있습니다.
template <class _InputIterator, class _Tp>
_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init);
[실제 accumlate() 함수의 선언은 이렇지 않습니다. 보기 편하도록 필요 없는 부분은 제거 하였습니다.]
여기서 중요하게 보아야 하는 것은 _Tp의 타입이 세번째 인수에 의해 결정 된다는 것입니다.
그러므로, 세번째 인수의 타입을 기존 타입보다 더 넓은 범위를 표현 할 수 있는 타입으로 한다면 overflow문제를 해결 될 것입니다.
예시)
int main() {
vector<int> arr{numeric_limits<int>::max(),2};
//overflow 발생
long result1 = accumulate(arr.begin(), arr.end(), (int)0);
//overflow가 발생하지 않음
long result2 = accumulate(arr.begin(), arr.end(), (long)0);
cout << "result1 : " << result1 << endl; // 출력 결과 : -2147483647
cout << "result2 : " << result2 << endl; // 출력 결과 : 2147483649
return 0;
}
'C++' 카테고리의 다른 글
| [C++] std::bind 함수를 원하는 호출 형태로 가공 (0) | 2026.03.24 |
|---|---|
| [C++] 사용자 정의 리터럴 (operator "") (0) | 2026.03.22 |
| [C++20 : Chrono.h] system_clock를 사용한 현재 시간 구하기 (0) | 2026.03.22 |
| [Visual Studio Code] C++ 자동완성(Autocomplete) 기능 활성화 (0) | 2026.03.09 |
| rel_ops를 통한 클래스 비교연산자 자동 구현 (0) | 2022.08.28 |