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
- AUTOSAR
- 순수가상함수
- AUTOSAR CAN통신
- Classic AUTOSAR
- 진료순서정하기
- MCU
- RTE
- Com 스택
- Can 스택
- softwareComponent
- 정적할당
- COM모듈
- ecu
- C
- UDS
- Can
- AUTOSA
- Mobilgen
- 단방향링크드리스트
- 배열
- Com Stack
- VFB
- C언어
- CAN stack
- AutoSar설계
- 싱글링크드리스트
- Application Layer
- C++
- diag
- UDS프로토콜
Archives
- Today
- Total
이현구의 공부방
[C/C++] accumlate 평균 구하기 본문
대개는 int형 배열 값들의 평균 구하는 부분에서 보통은 아래와 같은 코드로 반복문을 사용하여
배열의 값들을 합해준 뒤에 배열의 size만큼 나누어 평균을 구하게 된다.
#include <vector>
double solution(vector<int> arr) {
double answer = 0;
int size = arr.size();
double sum = 0;
for (int i = 0; i < size; i++)
{
sum += arr[i];
}
answer = sum / size;
return answer;
}
하지만 accumlate를 쓰게 된다면 간단하게 배열의 합을 구할 수 있습니다.
#include <string>
#include <vector>
#include <numeric>
using namespace std;
double solution(vector<int> arr) {
double answer = accumulate(arr.begin(), arr.end(), 0); // accumulate 가 뭐지 ?
return answer / arr.size();
}
std::accumulate 함수는 <numeric> 헤더에 정의되어 있으며, 범위 내 요소들의 합을 반환합니다.
첫 번째 인자로는 범위의 시작 지점을,
두 번째 인자로는 범위의 끝 지점을,
세 번째 인자로는 합산을 시작할 값(초기값)을 받습니다.
범위 내의 요소들은 모두 더해져 최종 값을 반환합니다.
예를 들어, std::accumulate(vec.begin(), vec.end(), 0)는 vec 벡터의 모든 요소를 더한 값을 반환합니다.
이 함수는 일반적으로 반복자를 사용하는 STL 알고리즘과 함께 사용됩니다.
주의가 필요한 사항은 세 번째 인자인 초기값입니다.
template< class InputIt, class T >
constexpr T accumulate( InputIt first, InputIt last, T init );
함수의 원형을 보게 된다면 세 번째 인자 값으로 들어온 타입이 반환되는 것을 확인할 수 있는데요.
예를 들어 int size를 초과하는 합산 결과가 발생한다면 오버플로우가 발생하게 됩니다.
때문에 아래와 같이 상황에 맞게 초기값을 세팅해주어야 합니다.
- U : unsigned 정수 타입을 나타냅니다. 예를 들어, 10U는 unsigned int 타입의 10을 나타냅니다.
- L : long 정수 타입을 나타냅니다. 예를 들어, 10L은 long 타입의 10을 나타냅니다.
- LL : long long 정수 타입을 나타냅니다. 예를 들어, 10LL은 long long 타입의 10을 나타냅니다.
- F : float 실수 타입을 나타냅니다. 예를 들어, 3.14F는 float 타입의 3.14를 나타냅니다.
- D : double 실수 타입을 나타냅니다. 예를 들어, 3.14D는 double 타입의 3.14를 나타냅니다.
- L : long double 실수 타입을 나타냅니다. 예를 들어, 3.14L은 long double 타입의 3.14를 나타냅니다.
'C++를 해보자 > 기본기' 카테고리의 다른 글
[C/C++] 비트연산으로 홀수, 짝수 구분하기 (0) | 2023.03.06 |
---|---|
[C/C++] String배열과 Char 형 배열 (0) | 2022.07.09 |
[C/C++] 배열 - 1 (0) | 2022.07.07 |
[C/C++] Printf 함수 따옴표, 쌍따옴표, 역슬래시 출력 방법 (0) | 2022.07.03 |
Comments