トップページ⇒tech
985コメント310KB

【C++】template 統合スレ -- Part5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++ のジェネリックプログラミングの話をしましょう。
以下のスレッドを統合するスレです。
STLスレッド
Part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
Part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html

【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/ (html化待ち?)

Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html
【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc2.2ch.net/test/read.cgi/tech/1037795348/
【C++】template 統合スレ -- Part2
http://pc2.2ch.net/test/read.cgi/tech/1047978546/ (html化待ち)
【C++】template 統合スレ -- Part3
http://pc5.2ch.net/test/read.cgi/tech/1066493064/
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/
関連スレ、その他リンクは >>2-5 あたりに。
0153デフォルトの名無しさんNGNG
>>152
あえて意識して使うまでもないだろ。
日頃からどれだけのたくさんの不純物を
シャットアウトしてくれてると思ってるんだ。
その時点でSTLより上。
0154デフォルトの名無しさんNGNG
その通りだな
0155デフォルトの名無しさんNGNG
random_shuffleで、RandomNumberGenerator指定しないとランダムにならないのは
仕様なのでしょうか?
あと、RandomNumberGeneratorは自分で作成しないといけないのでしょうか?
0156デフォルトの名無しさんNGNG
>>155
「ランダムにならない」が、「プログラムを複数回起動しても
同一の並べ替えが起こる」を意味すると仮定して回答する。
random_shuffleは乱数生成器としてデフォルトでstd::randを使うから、
毎回違う結果がほしければ、random_shuffleを使う前に毎回違う値でstd::srandを呼ぶべし。
0157デフォルトの名無しさんNGNG
/dev/randomから引っ張ってくればいいんじゃない?
0158デフォルトの名無しさんNGNG
/dev/randomは重いじゃない?
0159デフォルトの名無しさんNGNG
責任を他になすりつけられればそれでOK
0160デフォルトの名無しさんNGNG
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |     /devは重い
/     ∩ノ ⊃  ヽ  
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
0161デフォルトの名無しさんNGNG
ギャップバッファが理解できません
0162デフォルトの名無しさんNGNG
頭悪いですね
0163デフォルトの名無しさんNGNG
>>155
大抵のOSの大抵の言語の大抵の処理系では、
srand 相当のものに同じ seed を渡すと(あるいは srand 相当のものを使わないと)
乱数を使うと毎回同じ数列が返されるようになってます。

乱数を利用するプログラムを作るとき、実行の度に違う値がでてると、
単体テストやらアルゴリズムの効率の比較やらプロファイリングに基づいた
チューニングとかしにくいから。
0164デフォルトの名無しさんNGNG
rand使わずmt使え
0165デフォルトの名無しさんNGNG
>>164
当然 mt でも事情は同じ。っていうかこれは利点なんだけど・・・
0166デフォルトの名無しさんNGNG
> 乱数を利用するプログラムを作るとき、実行の度に違う値がでてると、
> 単体テストやらアルゴリズムの効率の比較やらプロファイリングに基づいた
> チューニングとかしにくいから。

あたかもそれを理由にそのような仕様にしたといわんばかり

しかし実際は疑似RNGから導かれる当然の結果に過ぎない

因果の誤解は思考力の不足を証明する
0167not 163NGNG
>>166
API的は、seedを自動で、って選択もあったんじゃない?
# 例えば、大昔のMS-BASIC
渡すようにしてるのは、>>163にある理由もその一つでしょ。
0168デフォルトの名無しさんNGNG
>>166
俺は163じゃないけど。
それを理由にそのような仕様にしたんだよ。srandの規格を嫁。

でもrandがグローバルだから使いにくいけどね。
0169デフォルトの名無しさんNGNG
>>166
それを理由にそのような仕様にしたんだよ…
0170デフォルトの名無しさんNGNG
これか?
ttp://www.lysator.liu.se/c/rat/d10.html#4-10-2
0171デフォルトの名無しさんNGNG
線形合同法の疑似乱数生成期に同じ種を与えれば同じ乱数列を吐き出すという現象は
「単体テストやらアルゴリズムの効率の比較やら
プロファイリングに基づいたチューニングをしやすいように」
という人間の要望から発生した?
人間の要望に応じて数学的現象が定まるのはおかしいな。
ピタゴラスの定理は誰かがそれを望んだからそうなったと言うタイプはどこにでもいるが。
0172デフォルトの名無しさんNGNG
>>168
> それを理由にそのような仕様にしたんだよ。srandの規格を嫁。

163を翼嫁

「srand相当のもの」だ

疑似RNG全般についての話

疑似RNG全般の性格をその一部であるsrandの規格から規定するな
0173デフォルトの名無しさんNGNG
>>171>>172

API設計の話をしていることが理解できない頭の人。
0174デフォルトの名無しさんNGNG
>>172
スレ違いの上にウザイから下げて書けヴォケ
0175デフォルトの名無しさんNGNG
>>171
こういう、知識は豊富だけど頭が悪い人、っているよね。
0176デフォルトの名無しさんNGNG
アルゴリズムの話からAPI設計の話にすりかわった?
0177デフォルトの名無しさんNGNG
>>176
はじめからAPIの話だと思ってました。
0178デフォルトの名無しさんNGNG
>>166
MS BASIC はかなり初期のものから RANDOMIZE で seed を与え(られ)る仕様だよ。
実行毎に自動的に seed の初期化はされないけど、それは変数の値も含めて
全ての環境が残るっていう BASIC インタプリタの特性をひきずってるから。
0179デフォルトの名無しさんNGNG
>>171
処理系(ライブラリ)が勝手に seed を変えたりはしない、というAPI の仕様の話をしてます。
だって発端が >>151 だし。んで一般アプリケーションはどう振舞うべきかというと>>156 で
回答が出ているわけで、なんとも終わった話であることであるなぁ・・・
0180デフォルトの名無しさんNGNG
発端が>>151って・・・(w
>>155 じゃねーの?
0181デフォルトの名無しさんNGNG
>>177
アルゴリズムの話からAPI設計の話にすりかえて
そのあとAPI設計の話からAPIの話にすりかえた?
0182デフォルトの名無しさんNGNG
>>181
アルゴリズムって、STL用語で言うところのアルゴリズムのこと?
0183182NGNG
ごめん。ageちゃった……。100回種付けしながら反省してきます。
0184デフォルトの名無しさんNGNG
ていうか >>163 よ

> 大抵のOSの大抵の言語の大抵の処理系では、
> srand 相当のものに同じ seed を渡すと(あるいは srand 相当のものを使わないと)
> 乱数を使うと毎回同じ数列が返されるようになってます。

この前半部分は「大抵のOSの大抵の言語の大抵の処理系」と言ってるように
特定の言語の特定の規格について言ってるわけではなく
一般的に使われている線形合同な疑似乱数アルゴリズムの特徴について解説してる。

> 乱数を利用するプログラムを作るとき、実行の度に違う値がでてると、
> 単体テストやらアルゴリズムの効率の比較やらプロファイリングに基づいた
> チューニングとかしにくいから。

この後半は一見前半を受けて前半部分の理由を書いてるように見えるがそうではなく
Cの規格に含まれるrand/srandがなぜ線形合同な疑似乱数を採用したかの理由となってる。

話の展開がちぐはぐ過ぎだ。
これじゃ疑似乱数アルゴリズム全般の話題だと解釈する人も出てくるし
Cのrand/srandに特化した話題だと解釈する人も出てくる。

163の話の真中でアルゴリズムの話から規格の話に脈略なくすりかわってるということ。
0185デフォルトの名無しさんNGNG
(1)特定のアルゴリズムを使うとなぜそのような結果になるのかという理由
(2)特定の言語の規格がなぜそのアルゴリズムを採用したかという理由

>>155からアルゴリズムの話になってる最中に
(1)のふりをして(2)を書いたから人によって話題の対象がばらばらになり
アホレスが連鎖したってことかな
0186デフォルトの名無しさんNGNG
>>182
モリフォーリズムのこと
0187デフォルトの名無しさんNGNG
モリフォーリズムに該当するページが見つかりませんでした。
0188デフォルトの名無しさんNGNG
正しくはポリフォーリズムだそうです
http://pc5.2ch.net/test/read.cgi/tech/1071697977/388-
0189デフォルトの名無しさんNGNG
流行だったのか。Javaスレでも書いてあった。
0190デフォルトの名無しさんNGNG
モリモリタベヤサーイ
0191デフォルトの名無しさんNGNG
163=167=168=169
まずこのポリホの日本語をなんとかしてくれ
0192デフォルトの名無しさんNGNG
>>185
漏れは 163 なんだけど、
>>155 を「なんで適当に seed を毎回変えてくれないの?バグ?仕様?」ってな風に読んじゃったわけ。
seed が同じ擬似乱数なら毎回同じ系列が出てくるのは自明だとおもったんで。
んで、なんで毎回適当に変える仕様になってないか、を説明してしまった。

変わらないことが必要なことはあるし、変えたいなら自分で変えられるし、と。
0193デフォルトの名無しさんNGNG
えーと、163=178=179=192です。
0194デフォルトの名無しさんNGNG
俺は163じゃないんだけど
とやかく言う前にsrandの規格書を読め
0195is not a 163NGNG
srandの規格を読んだことない厨が知ったかぶりしてるだけでしょう。
頭悪いのバレバレ。
0196デフォルトの名無しさんNGNG
結局、>>166は何をどう誤解したの?
0197163以外の人NGNG
>>166
乱数の仕組みの話題だと勘違いしているようですが、
最初からAPIの話題です
0198デフォルトの名無しさんNGNG
>>163の前半は採用されてるアルゴリズムはこうですよ、という説明、
後半はなぜ採用されたのか、という説明。
なのに、>>166は後半をアルゴリズムがそうである説明だと誤解したわけだね。
なぜそんなありえない誤解の仕方をしたのかは解からないけど、
酔っ払っていたのかもしれないし、頭のおかしい人が沢山いる環境で生活してるのかもしれない。
あんまり攻めてやるな。
0199デフォルトの名無しさんNGNG
163ではありませんが、
163はアルゴリズムの話ではなくて、発端からAPIの話題のつもりです
0200デフォルトの名無しさんNGNG
>>166も仕様の話じゃん。
擬似RND以外に選択肢が無かったみたいなことを言いたかったんじゃないの?
0201デフォルトの名無しさんNGNG
163の前半はC言語の規格が採用したアルゴリズムを説明。
後半は採用した理由。
だから163は間違ってないということでファイナルアンサー?
0202デフォルトの名無しさんNGNG
>>201
それはみんな理解してる。
話題はすでに>>166が何を意味してるのかに移ってる。
0203デフォルトの名無しさんNGNG
APIって言葉がたくさん出てきてるけど
ここではどういう意味で使ってるんですか?
みんなばらばらのように見えるんですが
0204デフォルトの名無しさんNGNG
APIはAPIだべ
0205デフォルトの名無しさんNGNG
APIとはsrandの規格のことかな?
0206デフォルトの名無しさんNGNG
そもそもseedを必要としないほうがいいなら、API内部でseed作るっつーの。
0207デフォルトの名無しさんNGNG
templateを利用することによってDIPが
よりよく実現されると言えるかな?
0208デフォルトの名無しさんNGNG
API を外部に持たせてるのは seed 設定できる理由のためですよ。
複雑になるだけでそれ以外メリットないし。
0209デフォルトの名無しさんNGNG
163じゃないが
163を分かりやすく言い直すと次のようなもの

・ほとんどの言語や処理系では乱数に疑似乱数を使っている
・疑似乱数の場合 srand のような seed 設定できる関数に seed を渡すと毎回同じ数列が返る
・さらに srand のような seed 設定できる関数を使わない場合も毎回同じ数列が返る
・なぜそういう結果になるかというと、実行の度に違う値がでてると不便だから
・不便というのがどういうことかというと
単体テスト・アルゴリズムの効率の比較など
プロファイリングに基づいたチューニングとかしにくい
0210デフォルトの名無しさんNGNG
>>171で
・・・という現象は・・・という人間の要望から発生した?
と書いてあるからこいつが誤読してる。
現象が発生したのではなく、仕様が発生したとみんな言ってるだけなのに。
0211デフォルトの名無しさんNGNG
>>207 のDIPって設計原則のDIPのこと?
DipendencyなんたらPrinciple?
0212デフォルトの名無しさんNGNG
STLのイテレータはDIP的に考えると、すべてランダムアクセスであるべきだと思う。
0213デフォルトの名無しさんNGNG
http://www.objectmentor.com/publications/dip.pdf
0214デフォルトの名無しさんNGNG
DipendencyじゃなくDependencyだったよ orz

DIPはせまく読めば古典的なOOデザインだが、Policyなんか
先に生まれたライブラリがあとから提供されるものに依存する、
という点では立派な依存関係の逆転。
0215デフォルトの名無しさんNGNG
「163じゃないけど」と名乗る人が
短時間に似たようなことを沢山書くのが流行デスカ
0216デフォルトの名無しさんNGNG
216じゃないけど
そうみたいです。
0217デフォルトの名無しさんNGNG
>先に生まれたライブラリがあとから提供されるものに依存する
>先に生まれたライブラリがあとから提供されるものに依存する
>先に生まれたライブラリがあとから提供されるものに依存する

んなことできるかボケ
0218デフォルトの名無しさんNGNG
依存という言葉を聞きかじった厨房が
知ったかぶりに使ってるだけなんだから
許して上げてください
0219デフォルトの名無しさんNGNG
163やあれへんのが、きょうびのステータスや、われ
0220デフォルトの名無しさんNGNG
ライブラリが何らかの引数をとれば、一応そのライブラリは
後から渡されたパラメータに依存していることになる。
その引数が単なる値じゃなくてポリモっぽいものであれば
アルゴリズムその他は後から提供されたものに委ねるという
パターンがとれる。
じゃあテンプレートパラメータの場合は?

通常(メソッドや関数)の引数としてに何かを受け取る場合
と違い、アルゴリズムだけじゃなく自分自身の構造まで依存
できる。
ポリシーの多重継承で実装されたホスト・クラスなんかはそう。
0221デフォルトの名無しさんNGNG
>ポリモっぽいものであれば

インターフェイスに依存している

>テンプレートパラメータの場合は

同じ
0222デフォルトの名無しさんNGNG
依存関係を逆転、ってのは何らかの決定を遅延させる
ことによって再利用性を高めるのが目的。
インターフェイス、データ構造、アルゴリズムのうち
どれかは最初に規定しておくが、その他は後から提供
できるようにしたい。
普通のOOの場合はインターフェイスが規定されていて
アルゴリズムは後付けOK。
テンプレートの場合は?同じじゃないよね?
0223デフォルトの名無しさんNGNG
>>222
日本語でヨロ
0224デフォルトの名無しさんNGNG
>>222
テンプレートは同じインターフェイスのものをまとめるものだから、
インターフェイス重視という点ではすごくDIP。
0225デフォルトの名無しさんNGNG
特定のインターフェイスを継承しなけりゃならないのはうざ。
ホストクラスが使う限りのメソッドを、コンパイルが通るシンタックスで
用意しておけばOKとなれば、そこで(ベースとなるインターフェイスとの)
依存関係が切れてウマー
0226デフォルトの名無しさんNGNG
インターフェイス(クラス)との依存は切れるけど
使ったメソッドなどのインターフェイスとの依存を切る事は出来ないよ。
0227デフォルトの名無しさんNGNG
そりゃそうだ。つーか当然

>>222で書いたインターフェイス、データ構造、アルゴリズムなどの
要素について、どれに対する依存を残してどの依存を切るかtemplateを
使うと選択肢が増えると言いたかった。
0228デフォルトの名無しさんNGNG
222は依存という言葉を間違えて使ってるとしか思えない

他にも日本語おかしいが
0229デフォルトの名無しさんNGNG
最近Boostを使い始めたんですが、Boostの知名度というか認知度というかそういうのはどうなんでしょうか?

例えば配列の代わりにvectorを使用してて怒られるといったことは(特殊な環境を除いて)ないだろうと思いますが
ポインタの代わりにshared_ptrを使うというのはあまり推奨されないものなんですかね?

0230デフォルトの名無しさんNGNG
>>229
知らないやつが勉強不足。
0231デフォルトの名無しさんNGNG
>>229
auto_ptrで済む所をなんでもshared_ptrにするのはどうかと思いますね
0232デフォルトの名無しさんNGNG
>>230-231
どうもありがとうございます。

>知らないやつが勉強不足。
うちの教授(プログラムの専門に非ず)に「標準じゃないけど使って大丈夫なん?」的な
ことを言われたんでちょっと使うのが不安だったんですが、使っても良さそうですね。

>auto_ptrで済む所をなんでもshared_ptrにするのは
そこら辺も注意してやっていきたいと思います。

それにしてもまだあまり参考書が出版されてないみたいですね。
やはりSTLへの採用待ちですか…
0233デフォルトの名無しさんNGNG
>>232
教授は単に君の勉強不足を不安視したんでは。
使っても大丈夫かどうか2chで聞くくらいだから。
0234デフォルトの名無しさんNGNG
>>222はStrategyとかのことをいってるんちゃう?
>>232
STLへの採用ってあるのかな?
BoostはBoostとしていつか標準化されるんだと思ってたけど
0235デフォルトの名無しさんNGNG
>234
STL(というか、C++標準ライブラリ)への採用は結構マジ話らしい。
聞きかじりだけど、boost::iteratorsあたりで使われているイテレータの分類なんかは
もう次期C++への採用は内定だそうで。
0236デフォルトの名無しさんNGNG
function, tuple, type_traits, regex, mem_fn, shared_ptr, ref, bind は
次期C++標準に含まれることが決定しているそうな
0237デフォルトの名無しさんNGNG
次期ってまだこのポンコツ言語を引っ張るつもりなのか・・・
0238デフォルトの名無しさんNGNG
function や bind を標準装備しないまま引っ張る方がよほど困るわ
0239デフォルトの名無しさんNGNG
>>232
boostはSTLと同じくらい標準だよ。
それぐらいSTLは使われてない。
実装がひとつしかない分、boostのほうがまともかもしれない。
0240デフォルトの名無しさんNGNG
>>239
>boostはSTLと同じくらい標準だよ。
>それぐらいSTLは使われてない。

意味不明すぎ。STLは標準でboostは標準じゃない。
0241デフォルトの名無しさんNGNG
>boostはSTLと同じくらい標準だよ。
>それぐらいSTLは使われてない。

分かりやすく
0242デフォルトの名無しさんNGNG
ある意味笑うところかも
0243デフォルトの名無しさんNGNG
マジどころかそれを目的にやってきたのに
「結構マジ話らしい」言われちゅゃおうところが情けな
0244デフォルトの名無しさんNGNG
あげるな
0245デフォルトの名無しさんNGNG
hash_mapはboostより標準ですか?
0246デフォルトの名無しさんNGNG
ちゃいます
0247デフォルトの名無しさんNGNG
>実装がひとつしかない分、boostのほうがまともかもしれない。
これは的を射てますね
つ〜かboostの中の人はSTLに依存しないコードを書いちゃってくれたらいいのに
と思いますよ
sgiと組み合わせるとボロボロ
結局preprocessorしか使えない
lexical_castすら使えないのには泣けました
0248デフォルトの名無しさんNGNG
stlport使ってくだはい
0249247NGNG
stlportということでちょっとついでに込み入ったこと聞きたいんですけどいいですかね
とあるハードウェア用のAPIを使って書かないといけないんです
でそのSDKが既にsgi使ってるんですよ
#includeが<list>だったり<list.h>だったりして

そのライブラリのソースコードは提供されていません
SDKにはAPIのヘッダ達とユーザ側でリンクするオブジェクトファイル(.lib)と
sgistlのヘッダが含まれているんです

例えばVC++付属のstl使おうとするとコンパイルとおらないんですが
こういう状況でstlport使えるんでしょうか?
ていうか試して使えなかった記憶があるんだけどもし使える方法があるならかなり嬉しい
0250デフォルトの名無しさんNGNG
>>249
バイナリ提供部分とのインターフェースがsgistlに依存していれば無理。
そうでなければ、どうにかして置き換えられるはず。

もちろん、「どうにかして」の部分は実際に
その環境を持っているあんたにしかわかんないよ。
0251あんたNGNG
>>250 どうもありがとうございます
>バイナリ提供部分とのインターフェースがsgistlに依存していれば無理。
これってどうやったらわかるんですか?
というライブラリがsgiとスタティックリンクされてたら無理
っていう理解でよいでしょうか?
0252デフォルトの名無しさんNGNG
>>249
そのSDKはSGIのSTLのままでいいの?

stlportの名前空間を変えてリンクすれば?
■ このスレッドは過去ログ倉庫に格納されています