http://d.hatena.ne.jp/w_o/20061005#p1
STLは、かなり複雑になってでも無駄なコピー等が一切起きないように頑張ってるのが素晴らしい。
たとえば、nth_element()とか、partial_copy()とか。あんまり使わないけど、sortだけだと、最初の4つが欲しいときとかに無駄にsortするのが許せない。
そして、なんでここまで無駄なコピーを嫌がるかというと、STLのコンテナには、参照じゃなくてオブジェクトそのものが入るから。コピーコンストラクタ搭載してたら何でも入るけど、コピー代入コストが大きい可能性があるから、コピーのコストを侮れない。
id:w_oの例でも、back_insert_iterator()のおかげで、一時的なリストを作らずに直接追加できる。
list.push_back( 3);list.push_back(4);list.push_back(5); v.push_back( 100 ); v.push_back( 200 ); std::transform( list.begin(), list.end(), std::back_insert_iterator<std::vector<int> >( v ), _1 * _1 );
参照とGCがあれば途中に無駄な配列が1つはいってもコピー代入コストが膨大とかにはならないから、たとえばPythonならこんな感じで満足してしまう。
>>> l = [3,4,5] >>> v = [100,200] >>> v += map(lambda x: x*x, l) #無駄な一時リスト発生 >>> v [100, 200, 9, 16, 25] >>>