STL algorithm 等と速度

とっても微妙な話だけど、手軽に実行速度をなるべく上げたいときに STL を使うべきかそうでないか。GCC 4.3.4 のSTLソースコードと、実際の計測速度とかから判断したもの。なお、最適化 -O3 を使っています。

std::copy, std::equal, std::fill_n
bits/stl_algobase.h で定義される基礎的なアルゴリズム関数。インライン関数であり、また組込型ならビルトイン関数が呼ばれたりするので使えるなら使った方がよい。
std::transform
単項・二項演算子を適用する関数。インライン関数ではなく、普通のループでしかない。小さなベクトルや行列の加減剰余くらいだと、わざわざ関数オブジェクトや関数バインダを用いてまで transform を使うのは仰々しいかも。コードにもよるけど関数オブジェクト生成のせいか微妙に遅くなった。
std::inner_product
これは algorithm ヘッダではなく numeric ヘッダにある。インライン関数であり、遅くなるような要素もなさそうなので使う方が分かりやすいかも。

なんにせよ、STL を使う理由は速度だけではなく、ソースコードを読みやすくするためだと思います。読みやすさという点では、transform は最初はちょっと使いづらいかも。