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는 수치 배열 연산을 요소별·슬라이스 단위로 깔끔하게 표현하는 특수 컨테이너예요. 과학 계산이나 신호 처리에 유용해요.

더 알아보기 (Learn more)

cppreference