【C++】STL(Standard Template Library)相談室 2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG【C++】STL(Standard Template Library)相談室
http://pc5.2ch.net/test/read.cgi/tech/1095583235/
関連スレなどは>>2以降で
0552デフォルトの名無しさん
2005/05/04(水) 23:03:02STL の意味を知らないからこそこのスレに来るんじゃなかろうかと。
0553デフォルトの名無しさん
2005/05/04(水) 23:18:27"標準的"手法
#include <iostream>
#include <sstream>
int main()
{
double d = 1.2345;
std::stringstream ss;
std::string str;
ss << d;
ss >> str;
std::cout << str;
}
0554デフォルトの名無しさん
2005/05/05(木) 00:14:19orzとSTL
0555デフォルトの名無しさん
2005/05/05(木) 00:15:12そうなんだけど。
だからこのスレいらないんだよ。
0556デフォルトの名無しさん
2005/05/05(木) 00:19:15例えば俺とか
0558デフォルトの名無しさん
2005/05/05(木) 00:44:210559デフォルトの名無しさん
2005/05/05(木) 02:38:55STLちゃうやん
0561デフォルトの名無しさん
2005/05/05(木) 02:53:460562デフォルトの名無しさん
2005/05/05(木) 02:58:39取り込まれてしまった今となっては明確に区切れる物では無い。
HP STL や SGI STL のことを指して言ってるのかもしれないが、
今使われてるのはそれらをベースにしたC++標準ライブラリだ。
範囲が明確に決まってるかのように、含まれるだの含まれないだの言うのは時代遅れだぞ。
このスレが不要である事に疑いの余地は無い。
0563デフォルトの名無しさん
2005/05/05(木) 03:08:02根強く残っているから混乱しちゃうんだな。
呼称は「標準ライブラリ」で統一されるといいんだけど。
0564デフォルトの名無しさん
2005/05/05(木) 03:17:35標準ライブラリじゃなくてテンプレートライブラリ
0565デフォルトの名無しさん
2005/05/05(木) 03:29:050566デフォルトの名無しさん
2005/05/05(木) 06:39:300567デフォルトの名無しさん
2005/05/05(木) 07:05:530568デフォルトの名無しさん
2005/05/05(木) 07:19:560569デフォルトの名無しさん
2005/05/05(木) 07:30:48はかってみたら5倍程度遅くなったんです。これってふつうですか?
0570デフォルトの名無しさん
2005/05/05(木) 07:53:23アクセス毎に境界チェックが入るということ等から見当がつきそうなものだが。
見当がつかなかったらコンパイラにアセンブラソースを吐かせて自分で比較すれ。
0571デフォルトの名無しさん
2005/05/05(木) 08:39:120572デフォルトの名無しさん
2005/05/05(木) 09:00:21速度が気になるのならboost::arrayをどうぞ。
0573デフォルトの名無しさん
2005/05/05(木) 09:02:38普通に全件表示を書いたら配列とvectorでは速度が変わらなかったんです。
普通にstd::find()を使ってもstd::accumurate()を使っても同じ速度だし。
どうやったらvectorを遅く動かせるんでしょうか。
0574デフォルトの名無しさん
2005/05/05(木) 09:07:12vectorは動的にメモリを確保するから、普通の配列に比べコンストラクタ・デストラクタに時間が掛かる。
0575デフォルトの名無しさん
2005/05/05(木) 10:45:100576デフォルトの名無しさん
2005/05/05(木) 10:48:22それでも普通の配列より時間がかかる
0577デフォルトの名無しさん
2005/05/05(木) 11:23:36operator[]()は境界チェックをしないわけだが。
0578デフォルトの名無しさん
2005/05/05(木) 11:28:29デバッグモードだと差がでるけど、リリースモードだとかなり差が縮んだはず。
まあ、俺的には可変長という汎用性の割には満足な結果だと思うがどうよ?
0579デフォルトの名無しさん
2005/05/05(木) 13:29:55保守性考えてもvectorでしょ。
#あ、boost::arrayは知らないのだが、vectorに較べてよりよいならそれも検討の価値ありだな。
0580デフォルトの名無しさん
2005/05/05(木) 14:00:52オープンソースの敵
0581デフォルトの名無しさん
2005/05/05(木) 14:09:49・スタック上の固定配列
・_alloca等でスタック上に確保される配列
・ヒープに確保される配列
には多少差があるだろ。ついでにvectorの場合要素の初期化コストもかかる。
0582デフォルトの名無しさん
2005/05/05(木) 15:32:31・スタック上の固定配合
0583デフォルトの名無しさん
2005/05/05(木) 16:15:32たとえば auto_ptr< vector<T> > impl; ← こんな感じでvectorとかdequeとか、
動的にサイズ変化するようなもんをauto_ptrに突っ込んでも大丈夫なんだろうか?
なんかとても不安なんだが。auto_prtとSTLは相性悪いし。
↓例
class hoge
{
auto_ptr< vector<string> > impl;
public:
hoge() : impl ( new vector<string>(0))
{}
void push(const string& str)
{ impl->push_back(str);}
string& back()
{ return impl->back();}
string& front()
{ return *(impl->begin());}
};
int main()
{
hoge x;
x.push("aaaaa");
x.push("bbbbb");
cout << x.front();
x.back() = "ccccc";
cout << x.back();
}
0584デフォルトの名無しさん
2005/05/05(木) 16:27:03それは構わない。逆がまずいだけで。
0585デフォルトの名無しさん
2005/05/05(木) 16:39:25「動的にサイズ変化するようなもん」を「auto_ptrに突っ込」むのは
あんま意味無いよな。
0586デフォルトの名無しさん
2005/05/05(木) 17:15:06STLコンテナのは有名だけど、おかげでググったらauto_ptrは最悪とか書かれてて
最近まで使うの躊躇してもんで。
>>585
ムッキッー 上の例はimplのほうじゃ!謝罪と(ry
(たぶん正確にはpimplだけどな)
0587デフォルトの名無しさん
2005/05/05(木) 17:23:38さらに指してるのがvectorならauto_ptrは別に使わなくて良いような?
0588デフォルトの名無しさん
2005/05/05(木) 17:24:30exceptional c++でも読んでみ?便利な使い方のってるよ。
結局、標準のスマートポインタがauto_ptrっていう
割と癖の強いスマートポインタしかないのがダメなだけ。
普通のスマートポインタが必要な人にとっては
「何だこれは?」みたいなことになる。
0589デフォルトの名無しさん
2005/05/05(木) 17:36:51万人に理解されない設計をするなってマジで思う。
0590デフォルトの名無しさん
2005/05/05(木) 17:47:160591デフォルトの名無しさん
2005/05/05(木) 17:54:55実際ところは↓こんな感じでつかってるんで、vectorを直接渡すってわけじゃないけど。
大丈夫か気になったんでちょっと聞きたかっただけ、今は反省している。
struct A{
string class;
set<string> name;
};
auto_ptr<A> impl;
0592デフォルトの名無しさん
2005/05/05(木) 18:00:31どうかってのを考えないでやたらめったらテンプレート使う
クソグラマが多くなったね。
ソースコードに技巧をこらしちゃうとホントに見れたもんじゃない。
やねうらおまわりの奴等のソースは汚いだけ。
でもって動作最悪w
せめて技巧をこらしたなら動作はよくしろよって思うw
ひとりごとね。レスつけないで。
0593デフォルトの名無しさん
2005/05/05(木) 18:06:310594デフォルトの名無しさん
2005/05/05(木) 18:13:15レスつけられるの怖がっちゃうような、
小動物並みの心臓しか持ってない癖に2chに書き込むな。
メモ帳にでも書いとけバーカ。
0595デフォルトの名無しさん
2005/05/05(木) 18:14:13不勉強な人に理解されないのはしょうがないと思う。
ある程度 C++ を理解している人で auto_ptr がわからない
なんていう人は今のところ見たことがない。
0596デフォルトの名無しさん
2005/05/05(木) 18:24:57>ある程度 C++ を理解している人で auto_ptr がわからないなんていう人は今のところ見たことがない。
俺のいる会社の同僚が全滅な件について
0597デフォルトの名無しさん
2005/05/05(木) 18:28:180598デフォルトの名無しさん
2005/05/05(木) 18:29:440599デフォルトの名無しさん
2005/05/05(木) 18:35:03俺のいる会社の同僚も全滅な件について
0600デフォルトの名無しさん
2005/05/05(木) 18:47:440601デフォルトの名無しさん
2005/05/05(木) 18:52:100602デフォルトの名無しさん
2005/05/05(木) 18:56:35boostがスレちがいな件について
0603デフォルトの名無しさん
2005/05/05(木) 19:00:390604デフォルトの名無しさん
2005/05/05(木) 19:04:23テンプレートに技巧を凝らしてしまう愚かな奴について
0605デフォルトの名無しさん
2005/05/05(木) 19:12:56boost::mplくらいでないとテンプレートに技巧凝らしてるとはいえない件について
0606デフォルトの名無しさん
2005/05/05(木) 19:14:15boostなんてほとんどの奴は使ってない件について
0607デフォルトの名無しさん
2005/05/05(木) 19:14:290608デフォルトの名無しさん
2005/05/05(木) 19:19:02C++ 独自の機能ではないよね?
0609デフォルトの名無しさん
2005/05/05(木) 19:48:33禿曰くAdaとCluから影響を受けたそうだが。あとはCのプリプロセッサマクロの安全な代替。
0610デフォルトの名無しさん
2005/05/05(木) 22:13:29thanx!!
Clu というのは恥ずかしながら知りませんでした。面白そうね。
http://www.shoeisha.com/book/pc/20c/chap08/gen.htm
0611デフォルトの名無しさん
2005/05/05(木) 23:00:45皮が?
0612デフォルトの名無しさん
2005/05/06(金) 06:37:300613デフォルトの名無しさん
2005/05/06(金) 07:21:55templateの方が、より強力でより便利な反面
圧倒的に危険な仕様であるが
0614デフォルトの名無しさん
2005/05/06(金) 07:37:45再帰展開が強欲。
0615デフォルトの名無しさん
2005/05/06(金) 17:31:07今のうちからなれておく意味で使っておくのは悪くないと思うの。
0616デフォルトの名無しさん
2005/05/06(金) 21:38:53俺の設計理念ではboostとかスマートポインタなんか必要になる時点で駄目。
普通の人の理解の限界はvectorとlistとstringまで。
と、俺は思ってる(その他のSTLってどうも気持ち悪い)。
0617デフォルトの名無しさん
2005/05/06(金) 21:46:170618デフォルトの名無しさん
2005/05/06(金) 22:10:46スマートポインタなんてどこで使うんだよ!ってきくと
大抵、ウンコな設計してるからみちゃいられん。
テンプレートは特に必要が無いなら、なるべくさけるようにして
設計技術を磨いてったほうがいいよ。
と、あえてテンプレートスレでいってみる。
なるべく多くの人に理解できる使い方を心がけよう。>ALL
0619デフォルトの名無しさん
2005/05/06(金) 22:11:18そんな常識もわからんのかw
0620デフォルトの名無しさん
2005/05/06(金) 22:14:20スマートポインタぐらい使えるだろw
0621デフォルトの名無しさん
2005/05/06(金) 22:16:35>あえてテンプレートスレでいってみる。
誤りですね。ここはテンプレートスレではありません。STL スレです。
…って何回言や理解すんだろな。
0622デフォルトの名無しさん
2005/05/06(金) 22:18:18GCを使うのを除けば、ろくな方式を知らんが
0623デフォルトの名無しさん
2005/05/06(金) 22:24:03是非スマートポインタを使わない際のメモリ動的取得解放の
設計を書いていただけないだろうか。
良いか駄目かということよりも、どうやれば良いのかということの
方が興味あるのです。
0624デフォルトの名無しさん
2005/05/06(金) 22:36:10boost::functionは使わないより使ったほうが分かりやすくなると思うけど。
0625デフォルトの名無しさん
2005/05/06(金) 22:42:10boost::functionで引数なしの型をどう書くのかしばらくわからなかった。
0626デフォルトの名無しさん
2005/05/06(金) 22:50:40流行だからは無しで。なんとなくも無し。
0627デフォルトの名無しさん
2005/05/06(金) 22:57:21だからなぜそんな2者択一な質問になるのだ?
STLにはない機能が、もしくはSTLにも同様な機能があるがより拡張・洗練された形で
Boostで提供されているから使っている、それが理由だ。
0628デフォルトの名無しさん
2005/05/06(金) 22:58:59方法とかそういうのは無い。
決まりを守るだけ。
・必ず確保したクラスで解放するようにする。
・そのメモリにアクセスできるのは確保したクラスのみ。
・確保したクラスを消せば消滅する。
・そのメモリへのポインタの保持を許さない。
ってだけ。
同じようなことをやるのにdelete時のメモリの解放忘れ防止ただそれだけのために
スマートポインタを使うのなら俺もいいとおもうのだけどね。
どうもそれだけじゃない人を見て、それが気持ち悪くてね。
0629デフォルトの名無しさん
2005/05/06(金) 23:02:21おkwwwっうぇっうぇうぇwwwうぇwww
wwwwww
wwwうはっwwwっwwwwwwっ
wおkwww
wおkwwwおkwww
おkwwwwwwwww
0630デフォルトの名無しさん
2005/05/06(金) 23:11:22>・必ず確保したクラスで解放するようにする。
>・そのメモリにアクセスできるのは確保したクラスのみ。
>・確保したクラスを消せば消滅する。
>・そのメモリへのポインタの保持を許さない。
こんな不自由な決まりを作らないとダメな時点でダメだろw
0631デフォルトの名無しさん
2005/05/06(金) 23:22:28戻り値なしのときはどうしているの?
0632デフォルトの名無しさん
2005/05/06(金) 23:24:13忘れてた。
0633デフォルトの名無しさん
2005/05/06(金) 23:27:59とか言ってる時点で駄目。
「スマートポインタなんてどこで使うんだよ!ってきくと
大抵、ウンコな設計してるからみちゃいられん」
と言ってるヤツは大抵ウンコな設計してるから見てられん。
0634623
2005/05/06(金) 23:32:23返事ありがとう。
つまり、scopedに解放されることを重視していると思って良いですか?
>>628の気持ち悪いのは複数のオブジェクトに共有されて、
いつが解放のタイミングかわからない状態のことだと感じました。
少なくともboost::scoped_ptrは許容されているように見えます。
0635デフォルトの名無しさん
2005/05/06(金) 23:33:02例えば、どんな?
0636623
2005/05/06(金) 23:41:25次に、>>634の前提で書くと、MicrosoftのCOMなどに対する考え方を
どの様に持っておられるか気になります。COMは参照カウントを内部に
持つことで、解放のタイミングが掴めません。逆に言えば、利用者がいなくなった
時点で自動的に解放されるとも取ることができます。
これに対しては気持ち悪いと思われますか?
良い、駄目、またその理由なども伺ってみたいです。
0637デフォルトの名無しさん
2005/05/06(金) 23:46:51auto_ptrもダメですか。そうですか。
0638デフォルトの名無しさん
2005/05/06(金) 23:53:08と言うことは、私もダメ…
0639デフォルトの名無しさん
2005/05/07(土) 00:12:05むしろCOMのようなフレームワークの存在を前提におけば
それだけでshared_ptrの有用性は十分認められると思うんですけれどね.
実際COMオブジェクトとshared_ptrの組み合わせはshared_ptrの代表的な使用例になりえますし.
>628
scopedな使用例にしかスマートポインタの必要性を認めてないですけれど,
factoryなどで関数境界,あるいはバイナリ境界を所有権が超える必要性って
普通にあると思うんですが,ここら辺ってどうなんでしょうか.
後,CoW(あるいはpimplの一部)には普通に所有権の共有がありえますし,
またslot,observerのようにオブジェクトを登録するようなパターンでは
どのようにすれば良いのかも聞いてみたい.
0640デフォルトの名無しさん
2005/05/07(土) 00:25:19てゆうか、参照カウンタによっかかって
プログラム組んでくとソース中にばら撒いた一見なんの関連もないようで
実はちゃっかりつながってるオブジェクトに酷い目にあわされるでしょ?
参照カウンタが役に立った極稀な例は俺のプログラミング人生で
ゲームのりソース管理ぐらいだ。
データのロードとアンロードをするとき。
まあ、こういう変なことするときって大抵最適化とかそっちまわりだよね。
十分に速度がありゃ、1回すべて破棄して、構築しなおす。これ最強。
綺麗な設計が重視されるときはこれが一番。
0641デフォルトの名無しさん
2005/05/07(土) 00:31:21所有権の共有が当然なソフトウェアしか書かない人も居る。
両方を書く人も居る。
大事なのは自分の環境が一般的ではない可能性を想定できることだ。
顔も知らない他人と話すのに「普通は」なんて、そう簡単に持ち出すべきではない。
0642623
2005/05/07(土) 00:32:20返事ありがとう。
>>636の俺の意図は>>628のレスの意図を明確化したいがためなんです。
どこに駄目さとか気持ち悪さを感じているのかを得たいと思ったんですよ。
でも、同じような目線でレスしてくれる人が居て助かります。
0643デフォルトの名無しさん
2005/05/07(土) 00:42:44お前のプログラム人生って
単純なショボイプログラムしか作ったことない、そんな人生なんだろうね。
0644639
2005/05/07(土) 00:44:34まったくもっておっしゃるとおりです.639のレス中の「普通は」という言葉は不適切でした.すいません.
639は「639に書いたような設計も十分想定され,そのような設計では所有権の共有あるいは
shared_ptrも十分有用だと思うので,一概にそれを否定するのには違和感を感じます.」
というふうに訂正させてください.
>642
>どこに駄目さとか気持ち悪さを感じているのかを得たい
それは私も同じです.
0645デフォルトの名無しさん
2005/05/07(土) 00:48:49COMって、 IUnknown で AddRef() が定義されてるんだから、 intrusive_ptr のほうが適切じゃないの。
0646623
2005/05/07(土) 00:54:28まだ酷い目に遭った事はありませんが、デッドロックが話題になったりしますね。
つまり参照カウンタに良い印象を持たれていないということなんですね。
参照カウンタ型の管理が必要になるのが効率アップの為が多いというのも
同意できます。この方式を利用するのはオブジェクトの生成から破棄
までの時間を限りなく短くするため(もしくはそのタイミングが決められない場合)
だろう考えるからです。
# 標準ライブラリのコンテナに入れるためというのは本質的ではないのでここでは無視
ここまでレスを続けると、>>628は言葉がまずいだけでそれほど的外れでは無いと
思っています。
0647デフォルトの名無しさん
2005/05/07(土) 00:58:29俺の文章とお前等の文章どっちが読みやすいかわかるか?
俺のは>>628,640でお前等のは>>634,636,639だ。
俺は俺が認識する普通のプログラマが普通にもっている知識で十分に読める文章で書いたつもりだ。
お前等の文章はどうかな?w
俺が難くなに守っているものはソース可読性でも設計理念でも無い。
俺が持つ普通という感覚の普通らしさだ。
まあ、scopedなfactoryでpimplがsharedな会話をしてるお前等にはきっとわからんだろうがなw
0648623
2005/05/07(土) 01:02:14に関しては許容しているようです。
さらに>>639にある
>scopedな使用例にしかスマートポインタの必要性を認めてないですけれど,
>factoryなどで関数境界,あるいはバイナリ境界を所有権が超える必要性って
>普通にあると思うんですが,ここら辺ってどうなんでしょうか.
これらの利用法は恐らく彼の許容範囲内では?
違っているなら否定して欲しいところです。
ではboost::shared_ptrをどのように利用するのかというところが
最も中心的な内容だと感じています。続きを書きたいですがここで切ります。
0649デフォルトの名無しさん
2005/05/07(土) 01:03:54なにコイツw
ただのバカじゃんw
それで満足したんだ。はいはいよかったねw
すごいすごい。普通の感覚バンザーイw
0650デフォルトの名無しさん
2005/05/07(土) 01:08:37そうかい?
すぐにこの能力が羨ましくてたまらないときがくるよ。
まあ、きても気が付かないかもしれないけどw
0651デフォルトの名無しさん
2005/05/07(土) 01:08:59俺はあのレスは頭いいと思った。かなりおもろい。
0652623
2005/05/07(土) 01:09:56まともに議論する気は無いということですか?
それともこちらの文章がわからなかったという話ですか?
少なくとも僕は否定的な感情で文章を書いていないですよ。
何が有用で、何が危険かを他人の感覚も含めて明らかにしたいだけです。
基本的に誰の話でもちゃんと聞いてみたほうが良いと思ったから
話を引っ張ったんですけどね。がっかりしました。
やっぱり2chでまともにやろうとするのが間違いだったようです。
スレ汚し失礼しました>皆様
■ このスレッドは過去ログ倉庫に格納されています