valarray — std::valarray
valarray — std::valarray
std::valarray는 값들의 배열을 표현하고 조작하는 클래스예요. <valarray> 헤더에 있어요.
요소별(element-wise) 수학 연산과 다양한 일반화된 첨자 연산, 슬라이싱(slicing), 간접 접근을 지원해요.
출처: cppreference
본문
// <valarray> 헤더
template< class T >
class valarray;
템플릿 매개변수
T— 원소 타입.NumericType요구사항을 만족해야 해요 (수치 연산 가능).
예시
#include <valarray>
#include <iostream>
std::valarray<double> a{1.0, 2.0, 3.0};
std::valarray<double> b{4.0, 5.0, 6.0};
std::valarray<double> c = a + b; // {5, 7, 9} (요소별 덧셈)
std::valarray<double> d = a * 2.0; // {2, 4, 6} (스칼라 곱)
std::valarray<double> s = std::sin(a); // 요소별 사인
double sum = a.sum(); // 6.0
주요 기능
- 요소별 연산 —
+,-,*,/,%와 스칼라·벡터 연산 - 수학 함수 —
abs,sqrt,pow,sin,exp,log등이 요소별 적용 - 첨자/슬라이싱 — 일반 첨자,
std::slice,std::gslice, bool 마스크, 간접(indirect) 첨자 - 감소 연산 —
sum(),max(),min() std::valarray친구들 —std::slice,std::gslice,std::mask_array,std::indirect_array
// 슬라이싱 — 부분 배열
std::valarray<int> v = {0,1,2,3,4,5,6,7,8,9};
std::slice s(0, 5, 2); // 시작 0, 5개, 간격 2 → 인덱스 0,2,4,6,8
std::valarray<int> sub = v[s];
// 마스크 기반 선택
std::valarray<bool> mask = {true,false,true,false,true};
std::valarray<int> sel = v[mask]; // 0,2,4
특징
- 수치 계산에 최적화된 배열로, 요소별 연산을 간결하게 표현해요.
- STL 알고리즘·반복자와는 잘 어울리지 않고, 수치 전용 시맨틱이에요.
- GPU/수치 라이브러리처럼 벡터화 친화적 설계를 지향해요 (구현 의존).
std::valarray는 수치 배열 연산을 요소별·슬라이스 단위로 깔끔하게 표현하는 특수 컨테이너예요. 과학 계산이나 신호 처리에 유용해요.