shared_ptr のコストって結構バカにならないからにゃー。サイズもそうだしコピーコストもそう。参照外しは高速だけど。
2010-11-12 01:26:41@kumagi まぁそうですよねー。あくまで「僕がやるなら」の話です。頭よくないので最低限のロックで済むならそうするな、と。
2010-11-12 01:32:15@SubaruG 並行処理の世界でmapの代用となる予定のskip listや、クローズアドレス式のhash mapはリンクリストをベースにしているので、あんまり嫌っても居られないんですこれが。
2010-11-12 01:32:35@SubaruG いわれてみたらstd::list<T>はまともに使ったことがないかも…!順序を保ちたい以外の理由で途中の位置に挿入したい場面が無くて!
2010-11-12 01:40:49@kumagi リンクリストの用途としては Boost.Intrusive の方がいろいろと便利なので、最近は専らそっちですね僕は。
2010-11-12 01:43:22std::listは 途中で中止される可能性がある キューで使う。ただ削除対象を検索しなければならない場合はリスト構造だと線形探索になるからmulti_index使う
2010-11-12 01:43:44そうか、ここでBoost.PropertyMapが出てくるのか!こいつなら要素にアクセスする時にコンテナも渡すから安全にアクセス出来る状況かどうかのチェックなんて楽勝ぢゃん!
2010-11-12 02:07:47まぁ ls.erase(iter++); は普通に便利なので、利点がそれだけでも十分に価値はあるんだけど、でも list っていう一番抽象的な名前にふさわしいコンテナとは言えない気がするんだよにゃ。
2010-11-12 01:46:48個人的には constant_time_size じゃない std::list もあっていい(つまりコンテナサイズを保存しないので splice 操作がイテレータのみで完結する)
2010-11-12 01:54:20@mono_shoo オーダは Ο(N) ですけど vector に比べたら倍で、メモリ確保コストとのトレードオフで考えたら要素数が大きくないうちは普通に勝ちますね。
2010-11-12 01:55:55insert もイテレータだけ指定すればそれでおっけー。 RT @SubaruG: 個人的には constant_time_size じゃない std::list もあっていい(つまりコンテナサイズを保存しないので splice 操作がイテレータのみで完結する)
2010-11-12 01:56:20というか、listって要素数が1万とか半端なくでかくなる可能性があって、かつ中間要素への操作が頻繁に行われるとかそういう用途で初めて有用になる代物でしょ?
2010-11-12 01:59:08