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/