週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメントありがとうございます。

元々は(*v)[i]が非常に面倒という話を書きたかったはずなのですが、今読み返してみるとそこがすっかり抜け落ちていますね。

そもそもデリファレンスするときに(*a)と書くのが非常に面倒なのです。優秀な->オペレータはどこへ行ってしまったのでしょう。類似品に(*it)->hogeがあります。正直この表記はconst_iteratorよりもはるかに面倒です。const_iteratorは確かに長くて面倒ですが、使うときは補完するので問題はありません。一方で(*a)と書くのは割とキーボー ドに優しくないです。

そんなことを考えていたら、v->at(i)(*v)[i]と長さが大差なくて、むしろatの方が書きやすいことに気づいてしまったといったところです。そんな驚きを書きたかったのですが、原文ではまったくもってそこが抜け落ちていますね。反省。

コメントをくださった人へのまとめ。

  • atメソッドは範囲外アクセスに対して例外を投げます。operator[]はチェックをしません。
  • vector.dataはヘッダファイルから発見したので例として上げましたが、私の中では完全にstring.dataと混同していました。
  • atはいつ入ったのでしょうか。c++98?
  • atがどのくらい遅いのか書いたほうがいいかもしれませんがあいにく今は眠いです。
  • vectorはメモリ上に連続することが保証されています。More Exceptional C++のp. 47, Item 7の解説にあります。あるいはHerb Sutterのコメントかな。
スポンサーサイト
コメント
この記事へのコメント
僕も書きやすいんでv->at(i)を使おうとしたものの、ろくに調べず不安だったので(*v)[i]を使ったという事例があるんですが、杞憂だったのかな。
2009/01/15(木) 12:51 | URL | tactom #-[ 編集]
がしがし行列計算しているときとか速度が重要な時は止めた方がいいのかもしれません。確信ないですが。
2009/01/15(木) 22:55 | URL | Gus #-[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://gusmachine.blog49.fc2.com/tb.php/417-74f6853c
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。