1.8.7.2 valarray
valarray는 요소별 연산을 사용하는 1차원 배열이다. 곱셈도 요소 단위로 수행한다. 스칼라값을 사용한 연산은 valarray의 각 요소와 함께 수행한다. 따라서 부동소수점 숫자의 valarray는 벡터 공간이다.
다음 예제는 몇 가지 작업을 보여준다.
#include <iostream> #include <valarray> int main() { std::valarray<float> v = {1, 2, 3}, w = {7, 8, 9}, s = v + 2.0f * w; v = sin(s); for (float x : v) std::cout << x << ‘ ‘; std::cout << ‘\n’; }
valarray<float>는 자체적인 타입 또는 float로만 동작할 수 있다. 예를 들어 2 * w는 valarray<float>과 int의 지원하지 않는 곱셈 연산이므로 컴파일 오류가 발생한다.
valarray의 강점은 슬라이스에 접근하는 기능이다. 각각의 연산을 포함해 행렬과 고차 텐서를 대리 실행할 수 있다. 그럼에도 불구하고 대부분의 선형 대수 연산을 직접 지원하지 않기 때문에 수치를 다루는 커뮤니티에서 valarray를 널리 사용하지 않는다. 또한, 선형 대수학을 위해 확립된 C++ 라이브러리를 사용하는 게 좋다. 앞으로의 표준에는 하나가 포함되기를 바란다.
A.2.9절에서는 가비지 콜렉션(Garbage Collection)에 대한 의견을 말하며, 기본적으로 우리는 가비지 컬렉션 없이 충분히 살 수 있다고 말한다.