std::valarray

#include <iostream>
#include <valarray>

#include <boost/range/algorithm/for_each.hpp>
#include <boost/range/adaptor/reversed.hpp>


int
main(){

    std::valarray<float>    array(100);
    std::valarray<float>    result(100);

    // 代入したり演算したり
    array = 0.0f;
    array = array + 3.0f;

    // 関数の引数として渡せたり
    result = std::sin(array);
    array = std::sqrt(result) + array;

    // メンバ関数とか
    float sum = array.sum();
    array.resize(200);

    // range はむりぽ
//    boost::for_each(vec, [](float f){ std::cout << f; });
//    vec|boost::adaptors::reversed;
    
    // std::begin() と std::end() を使えば OK
    std::for_each(std::begin(array), std::end(array), [](float f){
        std::cout << f;
    });
    
    return 0;
}

std::valarray は、まとめて計算を行う事に特化したコンテナです。
コンテナをまるごと演算する事が出来たり、std::sin() や std::sqrt() といった関数に直接渡すことも出来ます。
大量のデータを算術するときなんかには便利そうですね。


ただし、iterator がないので、pstade や boost::range といった range ライブラリは使うことは出来ません。。。
std::begin() や std::end() なんかは、オーバーロードされているので、使えるんですけどねぇ・・・。


[参照]
http://www.osakac.ac.jp/labs/matsuura/japanese/program/C++Builder/Variables/valarray/