【C++】STL(Standard Template Library)相談室 2
1 :
デフォルトの名無しさん :
05/01/05 13:18:54
2get!!!!
>>2 STLならもっとスマートに書けるのに・・・
>>3 STLなんてつかうより、もっと素直な関数型言語をつかえばいいのに。。
糞スレ立てんな死ね>>1
STLはTemplateスレとC++相談室に統合って決まっただろ。
7 :
デフォルトの名無しさん :05/01/07 12:21:01
糞レス乙
STLを使うと実行ファイルのサイズが一気に100倍に!?
10 :
デフォルトの名無しさん :05/01/08 10:28:34
本当にコードが100分の1になるのですか?
11 :
デフォルトの名無しさん :05/01/08 10:33:55
>>10 なる。
100ステップだったらⅠステップに
1000ステップなら10ステップだ。
10000ステップなら100ステップだ。
>>11 実際に実行されない部分が多いと思うんだけど。
13 :
デフォルトの名無しさん :05/01/08 12:56:46
>>12 STLのソースで実行されない部分が多いってことを心配してるの?
使う部分しかコンパイルされないから安心するよ
14 :
デフォルトの名無しさん :05/01/08 13:18:34
>>11 templateは呼び出されたときに初めてインスタンスされる。
これを利用して、実装できないメソッドとかの中身をコンパイルエラーがでるようにして、
コンパイル時にチェックするテクニックもある。
たまにずいぶん前に書いたコードがコンパイルすらできないということが発生したりもするw
見落としていた……。OTL
20 :
デフォルトの名無しさん :05/01/14 10:59:17
アプリのログファイルの追記を、std::fstreamでやるか、超迷ってます。 ファイルが巨大になったとき、std::fstreamだと激遅なんて事態にならないですよね? それともc言語のfopenのんが良いのかな。 使ってるコンパイラはBCBでつ。
>>20 何でここで聞くかな。
追記だけなら追加モードで開けばいいから追加するステップが複雑でなければ何を使っても大差ない。
23 :
デフォルトの名無しさん :05/01/14 16:04:35
std::fstreamで短時間にファイルオープン・クローズを繰り返すとやヴぁいでつか?
24 :
デフォルトの名無しさん :05/01/14 16:06:49
もう一つ、std::fstreamにマルチスレッドで出力しても良いでつか?
25 :
デフォルトの名無しさん :05/01/14 16:18:40
>>23 発想がヤヴァイです
キチガイみたいなことすんなよ
>>24 環境かけヴォケ
VCなら大ジョブ
mingwならおけ
cygwinはたぶんヤヴァイ
他はシラネ
だからなんでここで質問するんだって。
27 :
デフォルトの名無しさん :05/01/14 16:21:53
相談室だろヴォケ
サンクス、BCBでつ
>>25 >>26 「STL iostream」はセットだよ。ググてみて。
このすれC++相談室に統合でしょ
30 :
デフォルトの名無しさん :05/01/14 16:26:43
いいじゃねーかSTLなんだしよ 仕切りたがりの古参気取りのキチガイよ おとなしく冬眠してそのまま永眠しとけ
31 :
デフォルトの名無しさん :05/01/14 16:27:49
>>28 BCBはしらねーや
ごめんなこんなおれで
stream は STL じゃないと何度言えば解るんだハゲ。
C++相談室の次スレには こんなスレが誤って立たぬよう 是非とも(STL含む)ってのを加えて欲しいものだ
37 :
デフォルトの名無しさん :05/01/16 10:41:19
STLはboostに取って代わられるの?
五月雨
Boost.STLなるものが出る可能性は十分にあると思う.
STLがでかいのではなく streamがでかいのだ。
42 :
デフォルトの名無しさん :05/01/24 03:17:58
boostって何?
>>43 愛想のないページしか表示されないんですけど・・・
>>44 お前は今、全世界数百万人のGoogleユーザーを敵に回した
イベント日とかオリンピック期間中とか、十分愛想があると思うけど。
>>45 六十数億のうちの数百万なんて微々たるものなんですけど・・・
>>48 そのうち、人間として認められるのは数%だ。
自分が数%の方だと思ってるシアワセモノは手をあげて ↓
ノ
53 :
デフォルトの名無しさん :05/02/21 16:22:49
stringについて解説してあるwebサイトなどを紹介してください
55 :
デフォルトの名無しさん :05/02/21 17:49:57
>>55 ネタなのか釣りなのかマジレスなのか判断に苦しむな
57 :
デフォルトの名無しさん :05/02/21 21:59:47
vector<int> vec; vec.push_back(100); vec.push_back(101); たとえば上みたいなかんじで 今現在vectorに入っている要素の数と値をデバッガーでしらべるにはどうすれば良いですか? Eclipse CDT拡張, Cygwinのg++を使ってます。 方法はない?
>>57 プログラムで使われていれば
vec.size() とか vec.front() を評価することができるはずですけどね。
肝心のプログラムで使われてない場合は
(テンプレートのコード生成をg++の自動処理に任せていると)
メソッドのコードは当然バイナリに入らないから使えませんが。
テンプレートのコードを使う使わないに関わらず全部含めるような
コンパイルオプションがgccにあるかどうか調べてみては。
vec _Vector_base<int,std::allocator<int> > _Vector_alloc_base<int,std::allocator<int>,true> protected _M_start = 0x0a051b30 _M_finish = 0x0a051b38 _M_end_of_storage = 0x0a051b38 Eclipse(から呼び出されるgdb)で見るとこんな感じでわけわかめなんだよね。 自分で作れば幾らでも中身が見れるのにstlを使ってしまうと 入れたら最後まったく中身がわからんというのが何とも困ってます。
>>59 自分で作れば見れるようなやつが _M_start を見れないとは思わない。
(_M_finish-_M_start)/sizeof(int)
別にサイズが知りたい訳じゃないだろ。 gdbっていうのは副作用の無いメソッドもウォッチできないのか? できるなら普通に見ればいいだけだと思うが。
64 :
デフォルトの名無しさん :05/02/22 12:45:18
vectorをつかうのとnewで配列を確保するのとの違いは何?
>>64 自動拡張してくれたり、独自のメモリアロケータ使えたり、
基本的なメソッドを提供してくれる
そんな事はしってます。
そうですよね。失礼しました。
69 :
デフォルトの名無しさん :05/02/23 10:13:25
いえ私は知りませんでした。どうもありがとうございました。
std::list で listを走査中にイテレータが指す要素を削除したら、イテレータには何が残るんでしょうか。 VC7だと飛びましたが、STLの仕様として結果は未定義なんでしょうか? 以下テストソース std::list<int> test_list; void foo() { test_list.push_back(0); test_list.push_back(1); test_list.push_back(2); std::list<int>::iterator it = test_list.begin(); while(it != test_list.end()){ int i = *it; if(i == 1){ test_list.erase(it); } it++; } }
STLの仕様としては、リストの場合、消去された要素への反復子が無効になる。 if (i==1) test_erase(it++); else ++it; なら大丈夫じゃないかな。
test_list.remove(1); 実はこれだけで済む。 remove禁止としてもerase()は次の要素を指すイタレータを返すからこうしたらどうだ。 if (i == 1) { it = test_list.erase(it); } else { it++; }
eraseすると何が消えるの?
75 :
デフォルトの名無しさん :05/02/24 07:29:10
boostを使ってコンパイルすると 「for を含む関数はインライン展開できない」 が山ほど出るのだがどうにかならないものか? warningは基本的にOFFにしたくないのだが
>>75 どうにもならないというかなんというか……、どうなって欲しいんだ?
#pragma warning(push) #pragma warning(disable:1234) #include <boost/source_of_warnings.hpp> #pragma warning(pop) 恐らくこんな感じで局所的に特定のwarningを殺すpragmaが コンパイラについていると思うのでそれで殺すとか. これを毎回やるのが嫌ならこれを一つのヘッダーにしてしまって そちらをインクルードするようにするとか.
他のコンパイラはこんなwarning出ないのでしょうか? ちなみに今使っているのはBorland C++です
>>78 警告なんだから、理解した上で無視するべきだと思うよ。理解した上でね……
君のことは無視させてもらうよ
81 :
デフォルトの名無しさん :05/02/26 07:37:09
doubleをstringに変換する方法を教えてください
>>81 #include <string>
#include <strstream>
double d;
std::string str = (std::ostringstream() << d).str();
83 :
デフォルトの名無しさん :05/02/26 08:13:49
ボーランドのAnsiStringの様に簡単にとはいかないのですね。 あきらめます。
template<typename T> inline std:string ToString(T n) {return (std::ostringstream() << n).str();}
某国のコンパイラはループ付きのインライン関数は展開しないんだよ そんなの常識
88 :
デフォルトの名無しさん :05/03/04 20:19:48
vectorとlistの違いを教えてください。
>>88 共通点を探す方が難しいくらい、全然違います。
>>88 vectorは動的配列、listは線形リスト。
このスレって、重複なんでしょ(ウププ
92 :
デフォルトの名無しさん :05/03/05 02:58:10
途中挿入がない場合は、vectorでいいの?
boost::lexical_cast<std::string>(f);
>92 先頭挿入が沢山ありえるならdeque ないならvector
VC++6.0でSTLのコンテナに入れてるクラスや構造体のメンバを自動表示できるように なる方法ってありませんか? struct A{ int x; int y; } data; などとして、 data.←ここまで押すと[ x 、y ] とかメンバが表示されますよね vector< A > data; として、何個か入れたとして、 data[0]. まで押しても何もでないんです
VC.net使え。
98 :
デフォルトの名無しさん :05/03/05 08:34:47
VisualStudio.NET2003なら先頭(_Myfirst)だけ自動で見れるが 2個目からは無理 正直stdのコンテナクラスは使えないと思う
>>98 使えないんじゃなくて、使いこなせないんだろ。
インテリセンスは出たらラッキーくらいに思っとけ
>>98 それはインテリセンスじゃなくてデバッガの話じゃねえのか
重複スレだっつーにいつまでも続けてるから VC++ がどーのこーのぬかす阿呆まで出てきたじゃないか。
104 :
デフォルトの名無しさん :05/03/05 18:12:44
あえて age
どこと重複よ? もう一つのC++のスレは、STL以外だろ?
聞く前に調べろ
107 :
デフォルトの名無しさん :05/03/05 19:01:59
>>103 ひとりごとは掲示板じゃなくてチラシの裏へ
108 :
デフォルトの名無しさん :05/03/05 23:30:28
class Coordinate{ double x, y; }; のようなクラスがあったとして、 insert(make_pair<Coordinate, double>(hoge, mage)) みたいな感じでは map, multimap のキーとしての挿入ができませんでした。 これは挿入時、map内で比較がなされていて、それが足りないのだろうと思い Coordinate へ operator <, >, <=, >=, =, ==, != などを 追加してみたのですがやっぱり通らず そういうもんなんですか? 何か対応策、常套手段などありましたらご教授ください。 @WinXP, VC7.1
>>109 通るはず。どっか別のところで変な事してるんでしょ。
なお、make_pairはわざわざ型を指定する必要はない。
>>109 #include <iostream>
#include <map>
#include <utility>
class Coordinate{
double x, y;
public:
Coordinate(double xx = 0., double yy = 0.) : x(xx), y(yy) {}
bool operator<(const Coordinate& c) const {
return x + y < c.x + c.y;
}
};
int main()
{
std::map<Coordinate, double> mapc;
Coordinate hoge(1.0, 2.0);
double mage = 3.;
mapc.insert(std::make_pair(hoge, mage));
}
あ、抜けてた std::cout << mapc.begin()->second << std::endl;
116 :
デフォルトの名無しさん :05/03/06 15:55:12
STLがまともに動かないコンパイラを教えてください
119 :
デフォルトの名無しさん :05/03/06 16:45:45
さげるな
120 :
デフォルトの名無しさん :05/03/06 17:26:07
STLだけ更新することはできんの?
STLがまともに動かないと言っているのに STLを更新してどうすんだ
STLがまともに動かないのと テンプレートがまともに動かないのは別問題。
123 :
デフォルトの名無しさん :05/03/06 19:05:34
まんこ
124 :
デフォルトの名無しさん :05/03/06 19:05:58
まんこ
125 :
デフォルトの名無しさん :05/03/06 19:06:23
まんこ
126 :
デフォルトの名無しさん :05/03/06 19:06:58
うんこ
ちんこ
128 :
95 :05/03/06 21:54:54
>>96-102 あたり
遅くなってスマソ! ありがとう。
VC++6.0ではだめぽということで了解しました。
まんこ
まんこ
おまた
まんこ
われめ
スリット
バイナリモードのifstreamからlenバイト読み込みたいのですが、 このとき読み込み位置を移動させたくありません。 char buf[len]; ifs.read(buf, len); ifs.seekg(-len, ios::cur); のようにするしかないのでしょうか? copyとか使って実現することはできませんか?
おめこ
ぼぼ
141 :
デフォルトの名無しさん :05/03/09 16:42:37
142 :
デフォルトの名無しさん :05/03/09 17:39:07
std;;string s の内容をm回繰り返した文字列ssを作成する 一番手軽な方法って何でしょうか?ただし、O(N)程度で。 よろしくおねがいします。
for(int i=0; i<m; ++i)ss+=s;
>>142 std::string s, ss;
// ...
ss.reserve(s.length() * m);
for (int i = 0; i < m; ++i) ss.append(s);
>>142 std::string s, ss;
// ...
ss.reserve(s.length() * m);
for (int i = 0; i < m; ++i) ss.append(s);
>>142 std::string s, ss;
// ...
ss.reserve(s.length() * m);
for (int i = 0; i < m; ++i) ss.append(s);
118 名前:デフォルトの名無しさん[sage] 投稿日:05/03/06(日) 16:39:47
>>116 さげろ
119 名前:デフォルトの名無しさん[] 投稿日:05/03/06(日) 16:45:45
さげるな
118 名前:デフォルトの名無しさん[sage] 投稿日:05/03/06(日) 16:39:47
>>116 さげろ
119 名前:デフォルトの名無しさん[] 投稿日:05/03/06(日) 16:45:45
さげるな
>>116 パンツさげろ
119 名前:デフォルトの名無しさん[] 投稿日:05/03/06(日) 16:45:45
にげるな
150 :
"” :05/03/09 21:09:55
118 名前:デフォルトの名無しさん[sage] 投稿日:05/03/06(日) 16:39:47
>>116 さあげろしろ
119 名前:デフォルトの名無しさん[] 投稿日:05/03/06(日) 16:45:45
さげるな
118 名前:デフォルトの名無しさん[sage] 投稿日:05/03/06(日) 16:39:47
>>116 さげろ
119 名前:デフォルトの名無しさん[] 投稿日:05/03/06(日) 16:45:45
さげるな
__________________
(≦三) /
┃. (#゚Д゚)< 神であるひろゆきの名のもとにおいて
┃(≦ ▼ ) |
>>1 に対し、ここで聖戦を宣言する。
/. │━∥│ すべての2ちゃんねらーに告ぐ。
/. │ ∥│
>>1 に速やかなる死を!!
└-┘⊃⊃ \__________________
(≦三) (≦三) (≦三) (≦三)
┃. (#゚Д゚).┃ (#゚Д゚) ┃ (#゚Д゚)┃ (#゚Д゚)
┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
(≦三) (≦三) (≦三) (≦三)
┃. (#゚Д゚).┃ (#゚Д゚).┃ (#゚Д゚)┃ (#゚Д゚)
┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
__________________
(≦三) /
┃. (#゚Д゚)< 神であるひろぽんの名のもとにおいて
┃(≦ ▼ ) |
>>1 に対し、ここで聖戦を宣言する。
/. │━∥│ すべての2ちゃんねらーに告ぐ。
/. │ ∥│
>>1 に速やかなる死を!!
└-┘⊃⊃ \__________________
(≦三) (≦三) (≦三) (≦三)
┃. (#゚Д゚).┃ (#゚Д゚) ┃ (#゚Д゚)┃ (#゚Д゚)
┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
(≦三) (≦三) (≦三) (≦三)
┃. (#゚Д゚).┃ (#゚Д゚).┃ (#゚Д゚)┃ (#゚Д゚)
┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
__________________ (≦三) / ┃. (#゚Д゚)< ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 ┃(≦ ▼ ) | ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 /. │━∥│ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 /. │ ∥│ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 └-┘⊃⊃ \__________________ (≦三) (≦三) (≦三) (≦三) ┃. (#゚Д゚).┃ (#゚Д゚) ┃ (#゚Д゚)┃ (#゚Д゚) ┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ ) (≦三) (≦三) (≦三) (≦三) ┃. (#゚Д゚).┃ (#゚Д゚).┃ (#゚Д゚)┃ (#゚Д゚) ┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
__________________ (≦三) / ┃. (#゚Д゚)< ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 ┃(≦ ▼ ) | ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 /. │━∥│ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 /. │ ∥│ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。 └-┘⊃⊃ \__________________ (≦三) (≦三) (≦三) (≦三) ┃. (#゚Д゚).┃ (#゚Д゚) ┃ (#゚Д゚)┃ (#゚Д゚) ┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ ) (≦三) (≦三) (≦三) (≦三) ┃. (#゚Д゚).┃ (#゚Д゚).┃ (#゚Д゚)┃ (#゚Д゚) ┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
おまたなめたい
__________________
(≦三) /
┃. (#゚Д゚)< 2chの神ひろぽんの名のもとに
>>156 を
┃(≦ ▼ ) | 四系にする。
/. │━∥│
/. │ ∥│
└-┘⊃⊃ \__________________
(≦三) (≦三) (≦三) (≦三)
┃. (#゚Д゚).┃ (#゚Д゚) ┃ (#゚Д゚)┃ (#゚Д゚)
┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
(≦三) (≦三) (≦三) (≦三)
┃. (#゚Д゚).┃ (#゚Д゚).┃ (#゚Д゚)┃ (#゚Д゚)
┃(≦ ▼ )┃(≦ ▼ )┃(≦▼ )┃(≦ ▼ )
159 :
デフォルトの名無しさん :05/03/09 22:04:34
おまんこぉおおおおおおおおおおおおおおおp
おまたぁあああああああああああああ
161 :
デフォルトの名無しさん :05/03/10 12:47:53
162 :
デフォルトの名無しさん :05/03/10 12:48:24
163 :
デフォルトの名無しさん :05/03/10 13:41:09
STLについて語っていい?
167 :
デフォルトの名無しさん :05/03/10 13:53:50
まんこ
まんこ
ところでSTLPort以外になんかPortableでいいSTL実装ないの? SGIはSTLPortと一緒だから除外ね。newlibもウンコだから除外。
172もウンコ
175 :
デフォルトの名無しさん :05/03/10 15:16:20
スペースうんこ
ここの嵐は何のためにやっているのかよくわからないのだが・・・
>>178 1.愛と勇気のため
2.地位と名誉のため
3.喜びと快楽のため
さあ選べ。
まんこ
はるまんかいあわびもまんかい
まんこ
このスレはまんこのスレです
うんこもいいかな
やっぱりまんこ
まんこ
おまたぁあああああああああああああああああああああああ
まんこ
おめこ
193 :
デフォルトの名無しさん :05/03/11 19:17:56
プログラム界の長有名人のエビステーメーさんの書籍によると、 STLを使うことで、プログラムコードが100分の1になるそうです。
194 :
デフォルトの名無しさん :05/03/11 19:19:05
100分の1?
何であれてるの?
まんこだから
まんこ
まんこ
まんこ
>>195 マジレスすると、以前C++&テンプレート関連のスレが
乱立していているので整理しようという話があって、
STLはC++スレで、それ以外の非標準テンプレートは
テンプレート総合スレで扱う、ってことになったのに、
それを不満に思う奴が勝手にこのスレ立てたから
反発を受けている。
201 :
デフォルトの名無しさん :05/03/11 20:56:14
あげ
あげまんこ
あげたてすじ
まんこ
ちんこまんこ
まんこ
まんこ
208 :
デフォルトの名無しさん :05/03/11 21:44:30
205はエバに乗った状態でセクースしろ。
209 :
デフォルトの名無しさん :05/03/11 21:45:25
いやだ。
210 :
デフォルトの名無しさん :05/03/11 22:02:24
211 :
デフォルトの名無しさん :05/03/11 22:04:57
205はエバに乗った状態でセクースしろ。
まんこ
まんこ
まんこ
まんこ
216 :
デフォルトの名無しさん :05/03/12 04:33:59
218 :
デフォルトの名無しさん :05/03/12 10:34:29
219 :
デフォルトの名無しさん :05/03/12 11:20:24
というかSTLについて聞きたくてSTL相談室というスレがあれば普通そこで聞くでしょ。
ソース嫁 終わり
まんこ
222 :
デフォルトの名無しさん :05/03/12 18:36:10
やべえからあげる。
まんこ
>>219 だから何度も重複だ、と言っている。
…まあ stream I/O 訊いて来るアホの子もいてるわけだが。
225 :
(゚Д゚) :05/03/12 21:49:07
vfhfgbvcfsdfghjbhvgfdrytghjkbfgdfyhjjghf==
米倉涼子のまんこ
227 :
デフォルトの名無しさん :05/03/12 22:34:10
STLを使えない奴が暴れてるな w
同性愛系のスレでは、ウザイ女のことをまんこって呼ぶんだよ。
ホモスレ?ホモ板?またはゲイ?
まんこ
まんこ
われめぇええええええええええええええええええええええええええ 毛の生えてない、われめぇええええええええええええええええええ
炉
おまたぁああああああああああああああああああああああああ ぴんくの、おまたぁあああああああああああああああああああ
いとうまいこ可愛い
このような状況で訊くのは忍びないけど 漏れもSTL専用スレとは区別してる口なのでここで。 multimap::equal_range で得られる同じキーを持つ両端のiteratorは 間の(もしくはequal_range::second)要素を削除した場合の equal_range::secondはキチンと同一キーをもつ要素の終端を指している、 という保障はあるのでしょうか? あと、こういうのはどこで調べるものなんでしょうか?
日本語が変。
> 調べ者は本物の規格が一番だけど、 馬鹿みたいにたけーよな。
>>237 確かに変ですね^^;
>>238 丁寧にありがとうございます
今後、極力それらドキュメントに目を通すよう努力します(`・ω・´)
まんこ
まんこ
なんだこの値段の差は……。0.01MB違う理由はなんだ。
>>246 ライセンスかなぁ?
俺は $18 の方しか持ってないけど、これは PDF にライセンシーの名前や
注文番号、それと「Single User Only」の文字が埋め込まれてる。
どっかのコピペ ・ANSI Store 版の表紙にはページ下部に... Adopted by INCITS (InterNational Committee for Information Technology Standards) as an American National Standard. Date of ANSI Approval: 12/29/2003 ... ...の記述がある。( ISO Store 版にはなし。 ) ・ISO Store 版は Acrobat 3.0 以降で互換あり。 ANSI Store 版は Acrobat 5.0 以降で互換あり。 ( しおりがなかったのはこのせい? ) ・ANSI Store 版はフォームフィールドの入力が許可されていないが、 ISO Store 版は許可されている。 ( まぁ、こんな違い、意味ねぇけど。 ) ・ISO Store 版の暗号化レベルは「低(40-bit RC4)」。 ANSI Store 版の暗号化レベルは「高(128-bit RC4)」。 ...といったところで、まぁ、結論としては「 ISO、 氏ね。」
ついでにJISいいかんげんにしろ。 値段も高いし、ダウンロード販売と冊子が同じ値段ってどういうことだ。 JIS X 3010:2003 プログラム言語C 14,280円 JIS X 3014:2003 プログラム言語C++ 17,325円
> 値段も高いし、 JIS規格票の値段はページ数で決まるという仕様です。 高いのは諦めましょう(笑)
>>251 アホみたいに余白を詰めてページ数を
減らしているのにはそういう事情があったのか。
>250 一応、閲覧は無料で可能じゃないか。
事実上ダウンロードも
>>253 Cは見れるの知ってるけど、C++も見れるの?
C++の方、見ようとしたけど何度やっても 「ファイルが壊れています。修復できません」ってなる……。
Readerを最新版にしろ
イテレータが既にコンテナの末尾をさす可能性がある場合に、++しても安全でしょうか? hoge.end()で得られるイテレータをインクリメントするとhoge.end()が得られたりしますか?
そうですか……。素直にif文追加することにします。ありがとでした。
AcrobatReader7.0超高速
いまだに「Acrobat Reader」なんて呼んでる奴がいるのか。
stl を使って csv ファイルの読み書きをする サンプルコードってどこかにないでしょうか?
おまんまんしたいよ・・・
>>266 奇遇だな、漏れのUSBメモリの中にもあるよ。
おまんこしたい
肉まんしたいよ・・・
272 :
デフォルトの名無しさん :05/03/17 02:56:13
>>265 そんなのわざわざstl使わなくても簡単にかけるぞ
おまんこ相談膣
274 :
デフォルトの名無しさん :05/03/17 21:02:34
template<class _T1, class _T2> struct pair { //型名の定義 typedef _T1 first_type; //値の型名の別名をfirst_typeとする typedef _T2 second_type; //値の型名の別名をsecond_typeとする //データ格納変数の宣言 _T1 first; //キー格納変数 _T2 second; //値格納変数 //コンストラクタの宣言と定義 pair() : first( _T1() ), second( _T2() ) {} pair( const _T1 & _V1, const _T2 & _V2 ) : first( _V1 ), second( _V2 ) {} template<class U, class V> pair( const pair<U, V> & p ) : first( p.first ), second( p.second ) {} }; pairのコンストラクタ1つ目で、firstとsecondのメンバイニシャライザが、プレースホルダの_T1()と_T2()で初期化されてるけど、この_T1(),_T2()の実態ってなに?
firstとsecondのディフォルトコンストラクタ。
>>274 T()と書くとT型の一時オブジェクトが作られる。スコープは式が終わるまで。
括弧の中にはコンストラクタへ渡す引数を並べる。何も書かなければ当然デフォルトコンストラクタが呼ばれる。
組み込み型に対しては引数が無ければ0クリアされ,有ればいわゆる関数形式キャストになる。
>>274 pair() : first(),second() {}
これじゃダメなんだろうか?
278 :
274 :05/03/18 04:47:17
>>276 組み込み型のT()コンストラクタについて詳しい書籍ってご存知ですか?
std::vector<MyClass> v; こんな感じで使うと値渡しになってしまいますよね? 参照渡しの場合、removeなどとともに自動でdeleteしてくれるSTLってありますか?
ない。
>>279 こういう場合にそもそも参照渡しってできるんだっけ?
ポインタのことじゃないか。C++タームとしての参照は不可能だろ。
>>279 MyClassの代わりにboost::shared_ptr<MyClass>でもかちこんどけ。
>278 組み込み型を空のカッコで初期化した場合, ゼロを対象の型に変換した値で初期化されます. >組み込み型のT()コンストラクタについて詳しい書籍 ISO14882といってみるテスト(書籍じゃないですが)
だから閲覧すると漏れなく落っこち
観覧用のテキスト検索できないけど、 売ってるやつはできるの?
>>288 あんたみたいに日本語能力の乏しい人にはどっちみち検索は難しいだろ。
>287 すこしいじればいんさt
291 :
デフォルトの名無しさん :05/03/20 16:19:07
setの疑問なんだけど。 setのfindなどで取得したiteratorで、要素の変更が自由に行えるけど、 こんな事したら、せっかくのソート済みが滅茶苦茶になると思うのだが。 連想コンテナでは、イテレータでの要素の変更はNGですか? それともソート順に影響しない変更はOK?
Effective STLの22項がその話題だったな。 とりあえず、ソートに関わる要素はいじっちゃダメ。 ソートと関係無い部分は、どうしても変更したけりゃ注意してやれ。 と、そんな感じでは。
>>292 どうも。
やはり、むやみな変更は駄目だね。
Effective STL読んでみる。
>>291 あれ?setのキーはconstじゃないのか?
要素はソートと関係ないような・・・
>>295 う、そうだorz
でもそうなるとなおさら、constな希ガス。const_iteratorでなくてiteratorだったら、
コンパイルエラー出るんじゃないの?
>>296 Effective STL持ってないのか?
std::map/std::multimapのキーは確かにconstだが、std::set/std::multisetのキーは
非constなのだ。だからiteratorでコンパイルが通ってしまう。
正しく変更するには、一度削除してからもう一度挿入するしか手がない。
>>298 という事は、std::remove()などの削除系アルゴリズムをstd::setに対して
呼び出せる処理系と呼び出せない処理系が混在しているという事か。
移植性を重視するなら、constと決めつけてかかった方がいいみたいだね。
gcc3.4.2(mingw)+STLport4.6.2でこんなコンパイルエラーが。 STLportはキーをconstとしているようだよママン。 C:/STLport-4.6.2/stlport/stl/_algo.h: In function `_OutputIter _STL::remove_copy(_InputIter, _InputIter, _OutputIter, const _Tp&) [with _InputIter = _STL::_Rb_tree_iterator<int, _STL::_Const_traits<int> >, _OutputIter = _STL::_Rb_tree_iterator<int, _STL::_Const_traits<int> >, _Tp = int]': C:/STLport-4.6.2/stlport/stl/_algo.h:274: instantiated from `_ForwardIter _STL::remove(_ForwardIter, _ForwardIter, const _Tp&) [with _ForwardIter = _STL::_Rb_tree_iterator<int, _STL::_Const_traits<int> >, _Tp = int]' C:\mingw\set_const1.cpp:12: instantiated from here C:/STLport-4.6.2/stlport/stl/_algo.h:247: error: assignment of read-only location Execution terminated #include <set> #include <algorithm> int main() { std::set<int> si; si.insert(10); si.insert(2); si.insert(4); std::remove(si.begin(), si.end(), 2); }
22項読んでたんだけどsetの移植性のためにconst_castを使うって話しがあって、悪い例に EmpIDSet se; // typedef set<Employee, IDNumberLess> EmpIDSet; Employee selectedID; EmpIDSet::iterator i = se.find(selectedID); if (i != se.end()) { static_cast<Employee>(*i).setTitle("Corporate Deity"); } と書いては”いけない”と書いてある。何故かというと if (i != se.end()) { Employee tempCopy(+i); tempCopy.setTitle("Corporate Deity"); } と、等価であるから。 どうしていきなり一時オブジェクトが出てきたのか理由がわからないです。 教えてください。
キャストしてるからじゃ
>>301 ~その明示的変換の効果は、一時的変数tを宣言し初期化した上で、変換結果としてtを
使うことと同じである。
JIS X3014 5.2.9
実際、
string s = "asdf";
static_cast<string>(s).clear();
で、sは変わらないよ。
俺も初めて知った。
参照を使えってことだよね?
>>302-303 なるほど。
ありが㌧。
いつかはまるんだろうなぁorz
>>304 yes。
if (i != se.end()) {
const_cast<Employee&>(*i).setTitle("Corporate Deity");
}
というのが正解みたい。
307 :
デフォルトの名無しさん :2005/03/21(月) 12:02:58
>291-299 Sunのコンパイラだと、5.0から5.1?になったときに非constあり->constのみに変わったよ。 STLはRawgue?とかいうとこの実装。 あと、cygwin+g++ 3.3.3だと、constのみのようだ。 ただし、_GLIBCPP_RESOLVE_LIB_DEFECTSをdefineすると非constも追加されるみたい。
C++よりMLの方がいいよ。
std::vector#operator[]ってのがあるんだね C#でやたらイテレータとデリゲートがすげーみたいに言われてたけど C++にもあるじゃん もしかしてデリゲートと同じ機構を持つものもC++にあるの?
こんにちは 質問なのですが、 STLで、 struct greater_record : binary_function<record,record,bool> { bool operator()(const record& x, const record& y) const { return x.name > y.name; } }; の、クラスgreater_recordの後の、「: binary_function<record,record,bool>」は何を意味してるのでしょうか? あと、operator()の「()」の部分ですが、operatorには演算子しか指定できないと思ってました。なので、「()」はどういう意味をなすのでしょうか? 簡単に教えていただければ、あとは自分でGoogleを使い調べます。 申し訳ございませんが、宜しくお願いいたします。
312 :
310 :2005/03/21(月) 13:09:43
C++よりMLの方がいいよ。
314 :
310 :2005/03/21(月) 13:15:03
316 :
310 :2005/03/21(月) 13:43:42
>>315 そーなんですか・・・。
中級~上級あたりを説明しているサイトで有名なものってありますか?
STLに上級も中級もあるかよw STL覚えたら自作のTLに移行するだけじゃん
STLをマスターするに当たって、他人の書いたサイトで勉強しようというのが間違い。 中級以上を目指すなら複数のSTLの実装を読みつつ実際に自分で実装してみるのがいい。
>>316 みんな30歳超えたプロの集まりだぞ
がんばって追いつけ!
俺まだ学生(;゚Д゚)春休み
>>317-318 コンパイラの差異とか考え出すと面倒になってきて投げる。やってられん。
"作れば無けれ"がその基本原則
ヽ(´ー`)ノ ◆.ogCuANUcE=東大生?
>Effective STL―STLを効果的に使いこなす50の鉄則 >スコット メイヤーズ (著), Scott Meyers (原著), 細谷 昭 (翻訳) >価格: ¥3,360 (税込) >3,360 やすっ!(笑)
Iterator end = vector.end(); for(Iterator it1 = vector.begin(); it1 != end; ++it1) { for(Iterator it2 = boost::next(it1); it2 != end; ++it2) { … } } このように、2重にイテレータを回す場合も、for_eachを入れ子にして使って書いた方がいいのでしょうか?
正しい答えは、好きにしろってとこだ どっちがいいも悪いもない
for_eachはイテレータでなく値を渡すので、この場合は 内側はともかく外側のループには使えないと思う。
>>325 中身読むと、意見変わるよ・・・
せいぜい値段なり
>>324 > STLを勉強するんだったら、Effective STL最強。
最強っていうより、単なる入門書だろ。底が知れるぜ。
331 :
326 :2005/03/23(水) 14:53:17
googleを使い調べますじゃなくて、ちゃんと体系的に解説した本を 読む方がいいと思うぞ。もしくはそういうサイトでもいいけどさ。 STLじゃなくてC++自体の理解もあやふやのようだし。
334 :
デフォルトの名無しさん :2005/03/24(木) 18:24:14
VC++.net2003で下記のコードをコンパイルすると、多数のエラーが出ます。 なぜエラーがでるのかがわかりません。 ヒントをご提供し頂けると助かります。 void ___test_001(){ list<int> l; for ( int i = 0; i < 3; ++i ) for ( int j = 0; j < 3; ++j ) l.push_back(j); // l : 0 1 2 0 1 2 0 1 2 l.pop_front(); l.remove(2); list<int>::iterator it = l.begin(); while ( it != l.end() ) std::cout << *it++ << ' '; } >error C2228: '.end' : 左側がクラス、構造体、共用体ではありません。 >error C2228: '.pop_front' : 左側がクラス、構造体、共用体ではありません。 >error C2228: '.push_back' : 左側がクラス、構造体、共用体ではありません。 >error C2228: '.remove' : 左側がクラス、構造体、共用体ではありません。
>>334 using namespace stdを書き忘れてないか?
336 :
334 :2005/03/24(木) 18:37:58
自己解決しました。
それは「自己解決」なのか?
mapで困っています。 (1)追加したいキーをfind (2)findに該当がなければinsert (3)必要なくなったらerase を高速で行っていると、 不定期でSTL内のfind(バイナリーサーチ関連)で AccessViolationが発生します。 この現象を知っている方いないでしょうか。
>>338 原因に見当が付く人は大勢居ますが、知っている人はいません。
光速でしごくんだ
342 :
334 :2005/03/25(金) 00:20:03
>>342 解決した場合はその手順を書くのがマナー
>>339 なんでもいいので教えていただけないですか
>>338 情報不足で絞り込めません
1276通りの原因が考えられます
1273行目でnewしたポインタのdeleteを忘れてる
STLの制限速度の件について
糞PCがMAPの処理追いついてないだけじゃないの? と適当なこと言ってみる
マジレスすると、速度関係ないだろ。
>>338 が迷信でプログラミングしてるのが問題。
eraseとかしたらiteratorは新しいのに更新せんとあかんのでは? と適当に言ってみた。
一般的に反復子使ってコレクション走査してるときに コレクションの状態を変えるのはナンセンスだよね とはいえ、insert_iterator系も用意されてるから一概には言えないけど
ライブラリの使い方が間違ってるのを棚に上げて、
AccessViolationをCPUの速度のせいにする。
明らかに切り口の見つけ方がおかしいが、それを自覚しない|できない人間。
>>353 も間違いなく
>>338 と同じ人種。
例えば二日徹夜すると小人さんが代わりにやってくれると信じて、
あえて徹夜で待機するアフォと同レベル。
>>357 大量に改行入れてるレスをまじめに受け止めるなって
まんこ
#include <vector> using namespace std; vector<int> a = {2, 20, 3}; こんな感じで vector<int> a を初期化したいのですが、上の文法だとコンパイラーが error: `a' must be initialized by constructor, not by `{...}' とエラーを出してきやがります。 本当はどう書いたら良いのでしょうか? aグローバル変数なのでpush.back()の羅列が出来ません。 だれか助けて。
ムリ。
>aグローバル変数なのでpush.back()の羅列が出来ません。 はい? 普通にmain()ででもすればいいじゃん。 さもなければ、こんなかんじか。 vector<int> a; int main() { #if 1 static const int aa[] = {2, 20, 3}; a = vector<int>(aa, aa + sizeof(aa) / sizeof(aa[0])); #else a.push_back(2); a.push_back(20); a.push_back(3); #endif ...; return 0; } つーか、グローバル変数にしたい理由が判らん。
364 :
361 :2005/03/27(日) 19:29:02
>>362 む、む、む、無理なんですか!?
実はSTLってたいしたこと無い?
>>363 このvector<int>自体はプログラム全体から参照(read only)するのでグローバルにしたいんですよ。
んでプログラム中で値を変更する事はないから初期化のときに値を入れておくと。
俺のちょー美しい設計がスタートからくずれた…
>>364 main()の最初の行にinitialize()っての入れてそこで代入すりゃいいじゃん
>>363 単に定数で初期化したいんだろ。
おまえの例示した内容でアフォだってことはわかった。
>>361 vector<int>を派生させるかして、
適当に作成したコンストラクタの引数で初期化しろ。
367 :
363 :2005/03/27(日) 19:41:44
>>364 グローバル変数なんぞにせず、そう言う値を持つクラスにすればいいじゃん。
そう言う意味では>366の後半。
368 :
デフォルトの名無しさん :2005/03/27(日) 19:44:11
>>362-367 みんなありがとう。でも理解できないでつ。
少なくとも俺の考えた方法は無理だとわかりました。
出直してきます……
>>364 read onlyなら普通のconstな配列をグローバル変数にしたら駄目なのか?
なんでvectorにいれる必要があるんだ。
370 :
361 :2005/03/27(日) 19:53:09
368に名前入れ忘れた。
>>369 うん、普通にconstの配列で良いよ。
単に vector って言ってみたかっただけ。ごめんなさい。ごめんなさい。ごめんなさい。
本当はSTLでかっこよく書いて、あのクソ野郎***をみかえしてやりたかったんだよ……
>>361 static int const initial_a[] = {2,20,3};
static int const num_initial_a = sizeof(initial_a) / sizeof(initial_a[0]);
std::vector<int> a(initial_a, initial_a + num_initial_a);
しかし、何がしたいのかわからん。
>>370 むしろ無駄が多いだけだろ、それ…。
笑われるぞ。
> 本当はSTLでかっこよく書いて、あのクソ野郎***をみかえしてやりたかったんだよ…… この場合は無理にSTL使ったほうがかっこわるい。 クソ野郎じゃなくても「なんでもSTL使えばかっこいいとでも思ってやがる」って言われるのがオチ。 もっと本質を見るようにしような。
374 :
361 :2005/03/27(日) 20:05:32
Cの配列でも十分だけど vector で定義して for_each でぐるぐる回したらかっこいいと思っただけでつ。 STLを使えるちょーーーーーーー嫌な奴がいて、STLが使えない俺を馬鹿にするんです。 で、俺もSTLぐらい使えるぜと思ったけどレベルが違いすぎました。 アホの子は白鳥にはなれないんですね……
あぜ道をスポーツカーで走って物損事故起こすようなマネはせんでいいよ ちゃんとSTLの趣旨を理解して使ってあげなきゃSTLが可哀想だ
>>374 for_each でぐるぐるはCの配列でもできるぞ。
そんなんだから馬鹿にされるんだ。
こんばんわ CXSValというクラスを作り、 #include <deque> template<class T> class CXSVal{ public: CXSVal(); ~CXSVal(); T Get(int index){ return m_valQueue.at(index); } void Set(int index,T val){ m_valQueue.assign(index,val); } std::deque<T> m_valQueue; };
もうひとつクラスを作り class CXSPartsEditer{ public: struct ORGCHARSET{ ORGCHARSET(){}; ~ORGCHARSET(){}; CXSString string;//文字列 CXSVal<int> sizeH; CXSVal<int> sizeV;//各文字幅 CXSVal<char> DBCSFlag;//SBCS(false)? DBCS(true)? RECT box;//ラインのRECTサイズ int numCntMax;//最大文字数 int numCntMax_wide;//最大ワイド文字数 int boundsWidthMax;//合計された最大文字列幅 int boundsHeightMin;//文字列における垂直方向の最小幅 int boundsHeightMax;//文字列における垂直方向の最大幅 }; (省略) ORGCHARSET m_CHSET[256]; (省略) };
これをビルドしたさい、下記のエラーが出てしまいます。 ConsoleAppMg error LNK2019: 未解決の外部シンボル "public: __thiscall CXSVal<int>::~CXSVal<int>(void)" (??1?$CXSVal@H@@QAE@XZ) が関数 __unwindfunclet$??0ORGCHARSET@CXSPartsEditer@@QAE@XZ$0 で参照されました。 ConsoleAppMg error LNK2019: 未解決の外部シンボル "public: __thiscall CXSVal<char>::CXSVal<char>(void)" (??0?$CXSVal@D@@QAE@XZ) が関数 "public: __thiscall CXSPartsEditer::ORGCHARSET::ORGCHARSET(void)" (??0ORGCHARSET@CXSPartsEditer@@QAE@XZ) で参照されました。 ConsoleAppMg error LNK2019: 未解決の外部シンボル "public: __thiscall CXSVal<int>::CXSVal<int>(void)" (??0?$CXSVal@H@@QAE@XZ) が関数 "public: __thiscall CXSPartsEditer::ORGCHARSET::ORGCHARSET(void)" (??0ORGCHARSET@CXSPartsEditer@@QAE@XZ) で参照されました。 ConsoleAppMg error LNK2019: 未解決の外部シンボル "public: __thiscall CXSVal<char>::~CXSVal<char>(void)" (??1?$CXSVal@D@@QAE@XZ) が関数 "public: __thiscall CXSPartsEditer::ORGCHARSET::~ORGCHARSET(void)" (??1ORGCHARSET@CXSPartsEditer@@QAE@XZ) で参照されました。 ConsoleAppMg fatal error LNK1120: 外部参照 4 が未解決です。 これはなぜ起きるのでしょうか? 初心者なため難しいです。 数時間ほど考えましたがわかりません。 わかるかたがいらっしゃいましたら、お教えいただけないでしょうか。
開発ソフトは、VisualStudio.net(C++)です。
>>380 あなたが利用したい関数がリンカが参照できる位置にないってことでしょ
必要なライブラリはパス上にあるの?
ごめん、見当違いな事書いてるな、おれ
ここに問題があるっぽい。 typedef struct tagORGCHARSET{ CXSString string;//文字列 CXSVal<int> sizeH; CXSVal<int> sizeV;//各文字幅 CXSVal<char> DBCSFlag;//SBCS(false)? DBCS(true)? RECT box;//ラインのRECTサイズ int numCntMax;//最大文字数 int numCntMax_wide;//最大ワイド文字数 int boundsWidthMax;//合計された最大文字列幅 int boundsHeightMin;//文字列における垂直方向の最小幅 int boundsHeightMax;//文字列における垂直方向の最大幅 }ORGCHARSET; STLは勉強したばかりなので、どこに問題があるのかの特定が難しいです。 構造体の中でSTLを用いてはいけないのでしょうか?
385 :
363 :2005/03/27(日) 21:11:57
>>374 例えば整数配列から値を検索するのにstd::find()をどう使えばいいか覚えてみたらどうだ?
君の例ならこんなもんだぞ。
static const int a[] = {2, 20, 3};
size_t length_of_a = sizeof(a) / sizeof(*a);
const int * it = std::find(a, a + length_of_a, 200);
if (it == a + length_of_a) {
std::cout << "Oops!\n";
} else {
std::cout << "Whee!\n";
}
386 :
363 :2005/03/27(日) 21:12:49
>>378-380 CXSVal のコンストラクタ、デストラクタが宣言されただけで定義されて無いから。
なんでこのスレで聞いたんだろう?
>>378 CXSValクラスの実装を *.cpp に書いてたらリンクが通らないので確認を。
389 :
378 :2005/03/27(日) 21:47:53
>>386 >>387 それはXSVal.cppで定義されてます。
もう少し考えてみたいと思います。
ありがとうございました。
>>389 export されていない関数(メンバ関数)テンプレートの定義は
インスタンス化されるコンパイル単位に含まれる必要がある。
たぶん export は使えないから、定義もヘッダに含めてしまうのが現状では一般的。
361は単にシングルトンつかえばいいだけだろ const std:vector<int> a& = create_a(); static const std::vector<int>& create_a() { static std::vector<int> &a; a.push_back(...); a.push_back(...); a.push_back(...); return a; } これなら、コンストラクタにも縛られんし
参照がらみでタイプミスった罠 orz
>>391 少々スレ違いだが、boostに同様のものがある。
#include <boost/assign/list_of.hpp>
const std::vector<int> a = list_of(2)(20)(3);
mapのoperator[]ってキーが存在しないときの戻り値は未定義ですか? それとも、必ず0が返るとかみたいに決まってますか?
>>394 の様な質問をする輩に T() が解るとも思えんが。
T() が分からない香具師がそもそも map なんか知(ry
今後の勉強のタメにT()を教えてください
別に NULLPO() でもいいんだけどな
デフォルトコンストラクタの結果が返るとか書けばいいだけでは? 組み込み型は0だな
初期値でいいんだよ あとGA()でもいいな
>>394 デフォルトコンストラクタの結果への参照が返る。
T()じゃ一時オブジェクトじゃん 返すのはT&だよ。
正確に言えばT()を挿入してそこへの参照を返すといったところかな。
キャーのび太さんのエッチ!
ある一つのプログラムの中で あるクラスのメンバ変数としてm_strAppPathをstringで定義し char szAppPath[MAX_PATH]; GetModuleFileName(NULL, szAppPath, MAX_PATH); m_strAppPath = szAppPath; m_strAppPath = m_strAppPath.substr(0, (m_strAppPath.rfind('\\')+1)); としてアプリケーションのパスを保持しています。 この部分は期待通りに動作しているのですが、 上のコードがある物とは別のクラスのソースファイルの中で strFileと言う変数をstringで定義し、GetOpenFileNameでstrFileにファイル名を取得し、 strFile = strFile.substr(0, x); ←xの値は任意 とすると、上のm_strAppPathと違ってstrFileがNULLになってしまいます 同じことをしているだけなのになぜ結果がおかしくなるんでしょうか・・・
>>407 strFileが初めから空ではないかと言ってみる。
409 :
407 :2005/03/29(火) 17:32:04
いえ、ちゃんとデータ入れてました デバッグでもちゃんとデータが入ってるのは確認しましたし 色々やっててやっと原因がわかったんですが lstrcpy((char*)strFile.begin(), 別のstring変数のポインタ); としてやってたのがいけなかったようです size()の返値が0になってました・・・ 直接コピーはダメなんですね・・・
それはやばい
むしろstrcpy推薦
あちこちで推薦して歩くなよw
>>409 basic_string<>に直接コピーすると内部でのデータ構造が破壊される
虞がある。そもそもbasic_string<>::begin()が返すのはbasic_string<>::iterator
であって、char*ではない。basic_string<>::iteratorがchar*で実装されている
「可能性もある」にすぎないし、かなりの数の実装ではそうではない。
>>409 strFile = 別の string 変数
にしなかった理由を知りたい。
GetOpenFileNameに渡したりしてたから
こんばんわ std::wstring m_string; wchar_t* pWC=m_string.c_str(); このpWCに直接アクセスしてもいいのでしょうか? たとえば、strcpyなどで文字列をコピーしたり。
読むのはいいけど書いちゃダメ
そもそもコンパイルが通らない気が… const wchar_t* ならわかるけど
Win32APIにstringオブジェクトを渡して使ってもらうことはできないんでしょうか 一旦別のchar変数に受け取ってから代入するしか無いんでしょうか
どの辺がSTL?
stringがSTL
c_str()を呼んで、const char * を渡せばいいだけでは?
423 :
デフォルトの名無しさん :2005/03/31(木) 10:53:50
何故stringのキャストは高機能じゃないの? 例えば、 int a=10 で string(a) は何故できない?
>>423 string の機能とする必要がないからだろうな。
425 :
デフォルトの名無しさん :2005/03/31(木) 11:41:27
>>424 確かにもう少し冗長な方法で、変換できますが。
borlandのAnsiStringやMFCのCStringではできるのに、stlがサポートしなかったのは、どうしてなのでしょうか?
>>425 「便利な文字列型」と「標準の文字列型」の違いがあるからだろうな。
>>423 最近はそーゆーのも「キャスト」と呼ぶんですか。
(´・∀・`)ヘー
>>425 暗黙の型変換を許したくなかったんじゃまいか
basic_string クラスっつーくらいだからな。
stringstreamを使えってことか
basic_stringはSTLではないんだけどね、ホントは
>>423 boost::lexical_cast
>>433 STL が何か解ってない
>>1 が勃てた重複スレで
その指摘はどうだろう。
436 :
デフォルトの名無しさん :2005/04/05(火) 00:17:02
イテレータからポインタに変換するいい方法はないでしょうか? 現在, hoge::iterator it; をポインタに変換するのに &*it としていますが,あんましいい方法じゃない気がするので….
>>436 template <typename Target, typename Source>
inline Target* iterator_cast(Source source)
{ return &*source; }
hoge<T>::iterator it;
T* t = iterator_cast<T>(it);
だったらこんなんどう?
オレはこんなのオススメしないけど
>393 boostなら、boost::arrayがあるじゃあないか
hoge<T>::iterator it; boost::addressof(*it);
いずれにせよ、見やすくなるわけでもないのに長くなるな。
442 :
436 :2005/04/05(火) 23:39:40
VC6だと hoge<T>::iterator it; T *p = (T*)it; みたいなのが普通に通ってたんですけど, VC7に移行したとたんエラーが出て通らなくなっちゃいました. もしかして,この書き方はVC6専用??
>>442 VC6 と VC7 の両方で
std::cout << typeid(hoge<T>::iterator).name();
を実行して見れ
>>442 イテレータがポインタで実装されている保証はないから、そういうコードは書いちゃダメだろ
ごめんね、お母さん初めてキャストしたから(ry
>>442 そこで reinterpret_cast ですよ。
449 :
436 :2005/04/06(水) 20:50:00
ぐはっ! どうやらやっちまってたらしい…。 1年間ぐらいずっと 「この変換は便利だ~」 とか思って使い続けていた俺はいったい…orz
>436は医院で内科医?
>>442 のことだと思われ。
一年間に書いたコード全部それかよ。
>>442 そこで reinterpret_cast ですよ。
std::listでイテレータの指す要素をリストの先頭に移動したいとき オブジェクトを新たに生成せずに行うことは可能でしょうか。 以下のコードくらいしか思いつかないのです。 Object foo = *iter; // ←オブジェクト生成のコストを減らしたい list.erase(iter); list.push_front(foo);
455 :
454 :2005/04/07(木) 07:01:52
自己解決しました。
>>455 後学のためにどう解決したのか知りたい。
splice() だろ。
458 :
454 :2005/04/07(木) 13:24:00
>>456 ,457
はい。list.splice(list.begin(),list,iter);です。
リスト使うならLISP使うと間違いのにな
そうそう、わざわざ妙ちくりんなリストライブラリ使う言語はアホだよな
まずは459の日本語が妙ちくりんな件
>>459 プログラミング言語以前に、日本語を勉強すべきだな。
わたし日本語ちょことです
はじめました、わたくしおまめくりとりすいいます どうがよろしくいれてください
合格!
467 :
デフォルトの名無しさん :2005/04/27(水) 10:47:21
string str; str="200"; で、このstrをint型に変換するにはどうしたらよいのですか?
その下に int i=200; と書く。
469 :
デフォルトの名無しさん :2005/04/27(水) 10:58:55
>>467 std::string str = "200";
std::istringstream is(str);
int i;
is >> i;
std::cout << i << std::endl;
1. チェックをしないとき
i = atol(str.c_str());
2. チェックをするとき
const char *p;
i = strtol(str.c_str(), &p, 10);
if (*p) {
エラー処理;
}
3. 無駄にC++なやり方
>>470
try {
int i = boost::lexical_cast<int>( str );
} catch(boost::bad_lexical_cast& err) {
// エラー処理
}
内部的には
>>470 と同じことをしてる
atoiが一番簡単だよなあ・・・
このスレ的ってなんだよw 全部STL使わにゃいけんのか?w
>>475 STLの相談と解釈すべきってことだろ。
477 :
470 :2005/04/27(水) 17:39:54
>>475 わざわざここで聞いてきたのだし、STL流儀でやるべきだろう。
って、ストリームってSTLじゃないんだっけ。
>>477 >ストリームってSTLじゃないんだっけ。
まったくもって違う。
つか、STL なんていう呼称に何か意味があるのか?
ついついatoiやsprintfを多用してしまう俺
STLスレ的って言うんだったらせめてこういう風にしようよ。 #include <iostream> #include <string> #include <algorithm> #include <cctype> #include <functional> bool ToInt(char c, int *n) { if (!std::isdigit(c)) return true; *n *= 10; *n += c - '0'; return false; } int main() { int Num = 0; std::string str = "200"; std::find_if(str.begin(), str.end(), std::bind2nd(std::ptr_fun(ToInt), &Num)); std::cout << Num << std::endl; return 0; } BCCのSTLはToInt()の引数をint&にすると参照へのポインタは作れないと言いやがる。Boostなら平気だったが。 std::find_if(str.begin(), str.end(), boost::bind(ToInt, _1, boost::ref(Num)));
boost::lambdaとboost::bindってどう違うの? いつもはboost::lambdaの方を使ってるんだけど。
>>481 boost::lambdaは無名関数作成。
boost::bindは
>>480 のように2引数関数オブジェクトから1引数関数オブジェクトを作ったりするのに使う。
でもboost::lambda::bindってあるじゃない?
>>483 boost 1.32 だと boost::lambda::bind よりも boost::bind の方が適用範囲が
広い。確か intrusive_ptr を使ってると lambda の方はうまく動かなかった
ような気がする。
>>484 あんまり答えになってないんじゃないか? それはさておき、俺は
boost::lambda::bindとintrusive_ptrを使ってるけど別に困ってないけどな。
俺の経験ではboost::bindはlambdaと混用できなくて、
必然的にboost::lambda::bindを使う方が多い。
boostのlambda使う奴がいるとは思わなかったw
普通に使わないか? 便利だと思うんだけど。
つーかbindって。ネーミングセンスなさ杉
STLがbind1st、bind2ndなんて名前つけちゃったから。
ai-n
boost::ボインど
>>489 STL 以前に、コンピュータサイエンスで使われてた単語をそのまま
持ってきただけかと。そもそも boost::lambda のラムダも、λ計算
そのままだし。
はじめbindっていうから、socketの話かとオモタ
boost::ランバダ
boost::penis
boost::uholtu!
boost::yaranaika?
boost::dagakotowaru
馬鹿でも参加できる流れになると速いな。
↓おっとここで天才登場
やっぱLISP最高
505 :
デフォルトの名無しさん :2005/04/30(土) 00:11:35
vectorの要素がポインタのときresizeでサイズを拡張するのは危険と教えられたのですが 理由は何ですか?
そうかねえ。488ではないが、bindではなくcurryとかにすべきだったんじゃないか?
>>489 STLのbind1st、bind2ndは引数に束縛という意味でbindをそのまま持ってきたわけだが、
boost::bindについてまで束縛を「そのまま持ってきた」と言えるかというと疑問だ。
別に危険じゃないと思うが。 単に拡張にせよ縮小にせよ、ポインタが指している先の面倒を自分でみる必要があるだけで。
ウホッ!いい男。
STL関係のサイトを見てると、 vectorを使って、動的に確保したメモリ領域のアドレスを管理するのに、 どこもポインタからunsigned longとかunsigned intとかに変換してるのですが、 直接ポインタ型でvectorを使っても何もダメなことって無いですよね? ポインタ型だって結局はunsigned longとかと同じ数値なんだし・・・
>どこもポインタからunsigned longとかunsigned intとかに変換してるのですが どこでや。 >ポインタ型だって結局はunsigned longとかと同じ数値なんだし sizeof(long*) == 8 sizeof(long) == 4 という環境もあるわけですが…
>>510 数値に変換しているのは、ポインタ型それぞれに
テンプレートのインスタンス化が起こるのを嫌ってるんだろう。
ただ、そこで整数型で置き換えるのは間違いで void* ぐらいにしておくべき。
ポインタ型でvectorを使うのは全く問題ないが、
問題ない理由としてポインタが数値であるという認識は間違い。
>>512 あぁいや、サイズが同じというんじゃなくて、結局は数値なんだしってことで
>>513 でも、データ上数値であることに変わりないと思うのですが
じゃあ、どういった理由で問題無いのでしょう?
516 :
513 :2005/04/30(土) 08:48:02
>>514 数値であっても、サイズが同じじゃないと問題が起こることぐらいわかるよな?
ポインタ型でvectorを使うのが問題ない理由は、ポインタ型が
vectorのテンプレート引数として要求される条件を全て満たしているから。
unko_curry はどうよ。
それはどっちが味でどっちが本質なんだ
519 :
デフォルトの名無しさん :2005/04/30(土) 18:36:36
おれが思うに、味がうんこだったら本質もうんこだと断定できる。 すなわち「うんこ味のカレー」はうんこそのものである。 また、「カレー味のうんこ」はたとえ見た目がうんこそっくりでも、 カレーそのものかもしれないという可能性がまだ残されている。 しかし、「うんこ」と断言されている以上、危険性は賭けである。 これ以上は1/2の確率と「運」に任せるしかない。 ゆえに、選ぶとしたら「カレー味のうんこ」だ!
520 :
デフォルトの名無しさん :2005/04/30(土) 18:44:01
しかし、ここで今、重大な見落としをしていることに気付いた。 それは「カレー味」とは、どの程度の質レベルなのか、という問題である。 もしもうんこが1%でもブレンドされていたらおれの敗北である。 「カレー味」と表記されたからといって、原料が100%すべてカレー である確率は残念ながらとても低いだろう。 最後に「うんこ」と断言されていることを忘れてはならない。 おれはまた、思考の渦に入り込んでしまった様だな。
それはつまり、「カレー」「うんこ」の定義次第ということだね。
難しいな・・
この問題に比べたらSTLの習得なんて簡単。
スカトロ大好きな俺にとっては簡単な問題
疑問なんだけど、 スカトロって、誰が出したのかも判らない様なうんこでも食えるもんなの?
そんな話はやめてくれ……。
お前ら楽しそうだなw
鴻上尚史のオールナイトニッポン (「究極の選択」コーナー) って18年くらい前だっけ? 息の長いネタだ<カレー味の運子
curry化の語源は食い物のカレーじゃなくて人名(Haskell Curry)だよ
>>529 は自分だけが物知りで特別だと勘違いしている痛い香具師
535 :
デフォルトの名無しさん :2005/05/04(水) 13:49:33
intあるいはdoubleをstringに変換する方法を教えてください
sprintf
537 :
デフォルトの名無しさん :2005/05/04(水) 14:21:52
>>536 もっとC++的なやり方はありませんか?
std::string str = boost::lexical_cast<string>((int)10);
strstream
lexical_castもなんか凄い遅いね
iostream系が遅いと感じるって何の処理する時? そういう時の代替案はなんだろう?printf?
そんなんでプログラム全体の動作に致命的な影響を与えるほど遅くなるなら C++使うのやめれ
>535 wsprintf
545 :
デフォルトの名無しさん :2005/05/04(水) 14:59:58
double x=1.0; string str="aaa"+string(x)+"bbb"; みたいなことが出来るような文字列クラスはありませんか?
std::ostringstream でも使いな
547 :
デフォルトの名無しさん :2005/05/04(水) 15:26:20
>>537 reinterpret_cast<std::string>
おまいらスレ鯛よく読め
だが断る
>>545 boost::lexical_cast()
>>549 STL の意味を知らないからこそこのスレに来るんじゃなかろうかと。
>>535 "標準的"手法
#include <iostream>
#include <sstream>
int main()
{
double d = 1.2345;
std::stringstream ss;
std::string str;
ss << d;
ss >> str;
std::cout << str;
}
>>552 そうなんだけど。
だからこのスレいらないんだよ。
無かったらまたどっかのアフォが立てるだけ 例えば俺とか
557 :
552 :2005/05/05(木) 00:39:38
”標準的”って書いてあるやん
>>559 だから”標準的”なんでしょ。
stringもstreamもSTLではないが標準ライブラリに含まれる。
561 :
デフォルトの名無しさん :2005/05/05(木) 02:53:46
じゃあSTLとSLの違いを教えてください
"STL"なんて呼称の範囲は、C++の標準ライブラリに 取り込まれてしまった今となっては明確に区切れる物では無い。 HP STL や SGI STL のことを指して言ってるのかもしれないが、 今使われてるのはそれらをベースにしたC++標準ライブラリだ。 範囲が明確に決まってるかのように、含まれるだの含まれないだの言うのは時代遅れだぞ。 このスレが不要である事に疑いの余地は無い。
それが結論でいいんだけど、書籍や入門サイトでSTLの呼称が 根強く残っているから混乱しちゃうんだな。 呼称は「標準ライブラリ」で統一されるといいんだけど。
564 :
デフォルトの名無しさん :2005/05/05(木) 03:17:35
563 標準ライブラリじゃなくてテンプレートライブラリ
テンプレートが邪魔だって言ってるんでは
orzとSTLの違いを教えてください
567 :
デフォルトの名無しさん :2005/05/05(木) 07:05:53
vectorは配列に比べて動作が遅くなりますか?
テメーで計ればすむことだろ
569 :
デフォルトの名無しさん :2005/05/05(木) 07:30:48
>>568 はかってみたら5倍程度遅くなったんです。これってふつうですか?
その値が普通かどうかは知らないが、サイズやキャパシティを自分で覚えてくれて アクセス毎に境界チェックが入るということ等から見当がつきそうなものだが。 見当がつかなかったらコンパイラにアセンブラソースを吐かせて自分で比較すれ。
だが断る
>>569 普通に全件表示を書いたら配列とvectorでは速度が変わらなかったんです。
普通にstd::find()を使ってもstd::accumurate()を使っても同じ速度だし。
どうやったらvectorを遅く動かせるんでしょうか。
>>573 vectorは動的にメモリを確保するから、普通の配列に比べコンストラクタ・デストラクタに時間が掛かる。
なので、はじめにあらかじめ確保する関数があったはず。
>>570 operator[]()は境界チェックをしないわけだが。
>>576 デバッグモードだと差がでるけど、リリースモードだとかなり差が縮んだはず。
まあ、俺的には可変長という汎用性の割には満足な結果だと思うがどうよ?
つーか、リリースモードとやらが何かよく判らんが、普通に最適化していれば>573の条件だと実質差がないはず。 保守性考えてもvectorでしょ。 #あ、boost::arrayは知らないのだが、vectorに較べてよりよいならそれも検討の価値ありだな。
リリースモードとかデバッグモードとかいっちゃてるやつは オープンソースの敵
・静的な配列 ・スタック上の固定配列 ・_alloca等でスタック上に確保される配列 ・ヒープに確保される配列 には多少差があるだろ。ついでにvectorの場合要素の初期化コストもかかる。
・性的な配列 ・スタック上の固定配合
auto_ptrを使ったimplとかクラス内の作業用メモリ確保で、 たとえば 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(); }
でもまぁ現実的には、「implとかクラス内の作業用メモリ確保」のために 「動的にサイズ変化するようなもん」を「auto_ptrに突っ込」むのは あんま意味無いよな。
>>584 STLコンテナのは有名だけど、おかげでググったらauto_ptrは最悪とか書かれてて
最近まで使うの躊躇してもんで。
>>585 ムッキッー 上の例はimplのほうじゃ!謝罪と(ry
(たぶん正確にはpimplだけどな)
所有権を移動させるつもりのないpimplで、 さらに指してるのがvectorならauto_ptrは別に使わなくて良いような?
auto_ptrは便利だと思うけどな。 exceptional c++でも読んでみ?便利な使い方のってるよ。 結局、標準のスマートポインタがauto_ptrっていう 割と癖の強いスマートポインタしかないのがダメなだけ。 普通のスマートポインタが必要な人にとっては 「何だこれは?」みたいなことになる。
>>588 万人に理解されない設計をするなってマジで思う。
だが断る
>>587 実際ところは↓こんな感じでつかってるんで、vectorを直接渡すってわけじゃないけど。
大丈夫か気になったんでちょっと聞きたかっただけ、今は反省している。
struct A{
string class;
set<string> name;
};
auto_ptr<A> impl;
592 :
デフォルトの名無しさん :2005/05/05(木) 18:00:31
書いたときそれが人に理解しやすいか どうかってのを考えないでやたらめったらテンプレート使う クソグラマが多くなったね。 ソースコードに技巧をこらしちゃうとホントに見れたもんじゃない。 やねうらおまわりの奴等のソースは汚いだけ。 でもって動作最悪w せめて技巧をこらしたなら動作はよくしろよって思うw ひとりごとね。レスつけないで。
だが断る
>>592 レスつけられるの怖がっちゃうような、
小動物並みの心臓しか持ってない癖に2chに書き込むな。
メモ帳にでも書いとけバーカ。
>>589 不勉強な人に理解されないのはしょうがないと思う。
ある程度 C++ を理解している人で auto_ptr がわからない
なんていう人は今のところ見たことがない。
>>595 >ある程度 C++ を理解している人で auto_ptr がわからないなんていう人は今のところ見たことがない。
俺のいる会社の同僚が全滅な件について
>>595 は「std::auto_ptr<>も理解できない奴はC++をまともに勉強していない」と言いたいんちゃうか。
そりゃ少しでもC++やってりゃauto_ptrくらいは知ってる罠
俺自身が全滅な件について
std::auto_ptr を理解した上で、マンドクセーので boost::shared_ptr を使っても良いのかどうかについて
しかしコンテナの要素にauto_ptrを使おうとすると「boost::_shared_ptr使え」といわれる件について。
>>603 テンプレートに技巧を凝らしてしまう愚かな奴について
>>604 boost::mplくらいでないとテンプレートに技巧凝らしてるとはいえない件について
>>605 boostなんてほとんどの奴は使ってない件について
俺の息子がここ1ヶ月で2cm伸びた件について
ムチで申し訳ないんだけど、Template の概念って何処から取り入れたの? C++ 独自の機能ではないよね?
>>608 禿曰くAdaとCluから影響を受けたそうだが。あとはCのプリプロセッサマクロの安全な代替。
肉が
ほとんどAdaのgenericのパクりだ templateの方が、より強力でより便利な反面 圧倒的に危険な仕様であるが
特殊化ってのがキュート。 再帰展開が強欲。
boost::shared_ptr や、boost::function、boost::bind なんかもそのうち標準になるし、 今のうちからなれておく意味で使っておくのは悪くないと思うの。
>>615 俺の設計理念ではboostとかスマートポインタなんか必要になる時点で駄目。
普通の人の理解の限界はvectorとlistとstringまで。
と、俺は思ってる(その他のSTLってどうも気持ち悪い)。
誰もオマエの設計理念なぞ聞いておらん
>>617 スマートポインタなんてどこで使うんだよ!ってきくと
大抵、ウンコな設計してるからみちゃいられん。
テンプレートは特に必要が無いなら、なるべくさけるようにして
設計技術を磨いてったほうがいいよ。
と、あえてテンプレートスレでいってみる。
なるべく多くの人に理解できる使い方を心がけよう。>ALL
聞いていなくてもレスは付くもの。 そんな常識もわからんのかw
普通の人の限界は…って、自分を普通だと思いたいんだろうけど、普通の人を馬鹿にしてないかw スマートポインタぐらい使えるだろw
>>618 >あえてテンプレートスレでいってみる。
誤りですね。ここはテンプレートスレではありません。STL スレです。
…って何回言や理解すんだろな。
スマートポインタなしで、どうメモリ管理をするのかしらん GCを使うのを除けば、ろくな方式を知らんが
>>616 是非スマートポインタを使わない際のメモリ動的取得解放の
設計を書いていただけないだろうか。
良いか駄目かということよりも、どうやれば良いのかということの
方が興味あるのです。
>>616 boost::functionは使わないより使ったほうが分かりやすくなると思うけど。
C++でvoidってvoid*以外はめったに使わないから、 boost::functionで引数なしの型をどう書くのかしばらくわからなかった。
なんでSTLじゃなくてboost使ってるのかを簡潔に述べてください 流行だからは無しで。なんとなくも無し。
>なんでSTLじゃなくてboost使ってるのか だからなぜそんな2者択一な質問になるのだ? STLにはない機能が、もしくはSTLにも同様な機能があるがより拡張・洗練された形で Boostで提供されているから使っている、それが理由だ。
628 :
デフォルトの名無しさん :2005/05/06(金) 22:58:59
>>623 方法とかそういうのは無い。
決まりを守るだけ。
・必ず確保したクラスで解放するようにする。
・そのメモリにアクセスできるのは確保したクラスのみ。
・確保したクラスを消せば消滅する。
・そのメモリへのポインタの保持を許さない。
ってだけ。
同じようなことをやるのにdelete時のメモリの解放忘れ防止ただそれだけのために
スマートポインタを使うのなら俺もいいとおもうのだけどね。
どうもそれだけじゃない人を見て、それが気持ち悪くてね。
629 :
デフォルトの名無しさん :2005/05/06(金) 23:02:21
>>628 >・必ず確保したクラスで解放するようにする。
>・そのメモリにアクセスできるのは確保したクラスのみ。
>・確保したクラスを消せば消滅する。
>・そのメモリへのポインタの保持を許さない。
こんな不自由な決まりを作らないとダメな時点でダメだろw
「俺の設計理念ではboostとかスマートポインタなんか必要になる時点で駄目」 とか言ってる時点で駄目。 「スマートポインタなんてどこで使うんだよ!ってきくと 大抵、ウンコな設計してるからみちゃいられん」 と言ってるヤツは大抵ウンコな設計してるから見てられん。
634 :
623 :2005/05/06(金) 23:32:23
>>628 返事ありがとう。
つまり、scopedに解放されることを重視していると思って良いですか?
>>628 の気持ち悪いのは複数のオブジェクトに共有されて、
いつが解放のタイミングかわからない状態のことだと感じました。
少なくともboost::scoped_ptrは許容されているように見えます。
>どうもそれだけじゃない人を見て、それが気持ち悪くてね。 例えば、どんな?
636 :
623 :2005/05/06(金) 23:41:25
>>628 次に、
>>634 の前提で書くと、MicrosoftのCOMなどに対する考え方を
どの様に持っておられるか気になります。COMは参照カウントを内部に
持つことで、解放のタイミングが掴めません。逆に言えば、利用者がいなくなった
時点で自動的に解放されるとも取ることができます。
これに対しては気持ち悪いと思われますか?
良い、駄目、またその理由なども伺ってみたいです。
「俺の設計理念ではboostとかスマートポインタなんか必要になる時点で駄目」 auto_ptrもダメですか。そうですか。
物に対して問答無用でダメと言う時点でダメ と言うことは、私もダメ…
>636 むしろCOMのようなフレームワークの存在を前提におけば それだけでshared_ptrの有用性は十分認められると思うんですけれどね. 実際COMオブジェクトとshared_ptrの組み合わせはshared_ptrの代表的な使用例になりえますし. >628 scopedな使用例にしかスマートポインタの必要性を認めてないですけれど, factoryなどで関数境界,あるいはバイナリ境界を所有権が超える必要性って 普通にあると思うんですが,ここら辺ってどうなんでしょうか. 後,CoW(あるいはpimplの一部)には普通に所有権の共有がありえますし, またslot,observerのようにオブジェクトを登録するようなパターンでは どのようにすれば良いのかも聞いてみたい.
640 :
デフォルトの名無しさん :2005/05/07(土) 00:25:19
>>636 てゆうか、参照カウンタによっかかって
プログラム組んでくとソース中にばら撒いた一見なんの関連もないようで
実はちゃっかりつながってるオブジェクトに酷い目にあわされるでしょ?
参照カウンタが役に立った極稀な例は俺のプログラミング人生で
ゲームのりソース管理ぐらいだ。
データのロードとアンロードをするとき。
まあ、こういう変なことするときって大抵最適化とかそっちまわりだよね。
十分に速度がありゃ、1回すべて破棄して、構築しなおす。これ最強。
綺麗な設計が重視されるときはこれが一番。
所有権の共有が必要ないソフトウェアしか書かない人も居る。 所有権の共有が当然なソフトウェアしか書かない人も居る。 両方を書く人も居る。 大事なのは自分の環境が一般的ではない可能性を想定できることだ。 顔も知らない他人と話すのに「普通は」なんて、そう簡単に持ち出すべきではない。
642 :
623 :2005/05/07(土) 00:32:20
>>639 返事ありがとう。
>>636 の俺の意図は
>>628 のレスの意図を明確化したいがためなんです。
どこに駄目さとか気持ち悪さを感じているのかを得たいと思ったんですよ。
でも、同じような目線でレスしてくれる人が居て助かります。
>参照カウンタが役に立った極稀な例は俺のプログラミング人生で お前のプログラム人生って 単純なショボイプログラムしか作ったことない、そんな人生なんだろうね。
644 :
639 :2005/05/07(土) 00:44:34
>>641 まったくもっておっしゃるとおりです.639のレス中の「普通は」という言葉は不適切でした.すいません.
639は「639に書いたような設計も十分想定され,そのような設計では所有権の共有あるいは
shared_ptrも十分有用だと思うので,一概にそれを否定するのには違和感を感じます.」
というふうに訂正させてください.
>642
>どこに駄目さとか気持ち悪さを感じているのかを得たい
それは私も同じです.
>>639 COMって、 IUnknown で AddRef() が定義されてるんだから、 intrusive_ptr のほうが適切じゃないの。
646 :
623 :2005/05/07(土) 00:54:28
>>640 まだ酷い目に遭った事はありませんが、デッドロックが話題になったりしますね。
つまり参照カウンタに良い印象を持たれていないということなんですね。
参照カウンタ型の管理が必要になるのが効率アップの為が多いというのも
同意できます。この方式を利用するのはオブジェクトの生成から破棄
までの時間を限りなく短くするため(もしくはそのタイミングが決められない場合)
だろう考えるからです。
# 標準ライブラリのコンテナに入れるためというのは本質的ではないのでここでは無視
ここまでレスを続けると、
>>628 は言葉がまずいだけでそれほど的外れでは無いと
思っています。
647 :
デフォルトの名無しさん :2005/05/07(土) 00:58:29
フッ、まあ、最後に言わせてくれ。
俺の文章とお前等の文章どっちが読みやすいかわかるか?
俺のは
>>628 ,640でお前等のは
>>634 ,636,639だ。
俺は俺が認識する普通のプログラマが普通にもっている知識で十分に読める文章で書いたつもりだ。
お前等の文章はどうかな?w
俺が難くなに守っているものはソース可読性でも設計理念でも無い。
俺が持つ普通という感覚の普通らしさだ。
まあ、scopedなfactoryでpimplがsharedな会話をしてるお前等にはきっとわからんだろうがなw
648 :
623 :2005/05/07(土) 01:02:14
>>628 ははっきり言及はしていないですがstd::auto_ptr、boost::scoped_ptr
に関しては許容しているようです。
さらに
>>639 にある
>scopedな使用例にしかスマートポインタの必要性を認めてないですけれど,
>factoryなどで関数境界,あるいはバイナリ境界を所有権が超える必要性って
>普通にあると思うんですが,ここら辺ってどうなんでしょうか.
これらの利用法は恐らく彼の許容範囲内では?
違っているなら否定して欲しいところです。
ではboost::shared_ptrをどのように利用するのかというところが
最も中心的な内容だと感じています。続きを書きたいですがここで切ります。
>>647 なにコイツw
ただのバカじゃんw
それで満足したんだ。はいはいよかったねw
すごいすごい。普通の感覚バンザーイw
>>649 そうかい?
すぐにこの能力が羨ましくてたまらないときがくるよ。
まあ、きても気が付かないかもしれないけどw
>>649 俺はあのレスは頭いいと思った。かなりおもろい。
652 :
623 :2005/05/07(土) 01:09:56
>>647 まともに議論する気は無いということですか?
それともこちらの文章がわからなかったという話ですか?
少なくとも僕は否定的な感情で文章を書いていないですよ。
何が有用で、何が危険かを他人の感覚も含めて明らかにしたいだけです。
基本的に誰の話でもちゃんと聞いてみたほうが良いと思ったから
話を引っ張ったんですけどね。がっかりしました。
やっぱり2chでまともにやろうとするのが間違いだったようです。
スレ汚し失礼しました>皆様
>>647 ちょ、ま、お前wwwwwwwwwww「フッ」ってwwwwwwwww
「フッ」って書いちゃったwwwwwwwwww
しかも勝利宣言wwwwでたwwwwwww
低能の証明の勝利宣言でちゃったwwwwwwwwうぇwww
>>645 詳しい理由は分かりませんがintrusive_ptrは推奨されないみたいなので
shared_ptrを優先して利用しているんですよ.もちろんintrusive_ptrもアリだと思います.
>>648 shared_ptrの話が中心になるのなら恐らくスレ違いになるので
Boostスレかtemplateスレ(多分Boostスレの方が適切)に移った方が良くないですか?
2chでは何かを主張するより それを叩く方が楽なんだよね。 このスレみてなんとなく思い出した。
656 :
651 :2005/05/07(土) 01:12:36
>>650 素晴らしい能力だ。きみの周りでは笑いが絶えないだろう?
>>652 俺が重要だと認識しているものを、君がまったく理解しようとしないから何も得るものがないのさ。
これでも真面目にレスをつけたつもりなんだけどね。
>>655 2chには限らないよ。
否定だけして根拠も何も示さない人間に、議論で勝つことは出来ない。
スマートポインタも使わずに例外安全を確保するなんて面倒なことやってる人間がいるのか。すごいな。
質問されたことに答えもせずに真面目にレスしたつもりなのか。普通ってすげーな。
>>657 >>628 でスマートポインタに関して許容している発言があったので
それを掘り下げたつもりだったんですよ。
どうやら僕のレスの意図も全く理解されていなかったようですね。
これを摺り寄せるのは面倒なので去ります。お付き合いありがとう。
>>654 配慮ありがとう。でも自分は気持ちが無くなってしまいました。
君は議論できそうな相手なんでどっかで出会ったらまた話したいです。
撤収。
662 :
デフォルトの名無しさん :2005/05/07(土) 01:33:23
フッ、まあ、最後に言わせてくれwwwwwwwwww
俺のwwwwww文章wwうぇwwwお前等の文章wwwww
どっちが読みやすいかわかるか?wwwwwwwww
俺のはwwwwwww
>>653 でお前等のはその他だwwwwwwwwww
俺は俺が認識する普通のVIPPERがwwwwww
普通にもっている知識で十分に読めるwwwwクオリティタカスwwww
オマエラの文章はブー⊂二( ^ω^)二⊃ーン
俺が難くなに守っているものはレス可読性でも設計理念でもねーよwwwwww。
俺が持つ普通という感覚の普通らしwwwwwwwwうぇwwww
まあ、scopedなfactoryでpimplがsharedな会話をしてるお前等にはきっとわからんwwwwwww
理解できない物を使わない者は賢明である。
>>663 先頭に「自分が」って入れると毎日の残業時間が1h減って、
先頭に「同僚が」って入れると毎日の残業時間が2h減って、
先頭に「一般的に」って入れると新人の研修期間が1/2になります。
各自、環境にあった選択をしてください。
理解出来なくていいからブラックボックス的に使ってればいいじゃん。低脳らしくさ。
>>648 少なくとも623氏にはもう少しレスしてほしかったな。
>>648 の気に入らない言葉リストではscopedしかひっかかっていないし、
scopedにしても、スマートポインタだのboostだのを
議論している人はわかっているはずじゃない?
なんでそこで「俺の考える普通の人」がでてくるのかな?
667 :
666 :2005/05/07(土) 02:32:50
>>665 理解無しでは駄目だろうな。
vectorの要素のポインタ保存しだす奴多数。
サイズが変わった瞬間に阿鼻叫喚の巷と化すことが予想できる。
ブラックボックスにするならそれなりのマニュアルが無いと駄目だな。
もちろん書いただけでは華麗にスルーされて終わりだろうが。
自分だけの理解で解決できるほど会社は甘くない。
自分が知らないことを他の人間が知ってるって場面もあるわけだし。
上手く協調していかないとね。
669 :
デフォルトの名無しさん :2005/05/07(土) 17:41:07
・・・で、スマートポインタのデッドロックはどうやって回避するって?
671 :
デフォルトの名無しさん :2005/05/07(土) 17:51:22
>>671 だれも回避するなんて言ってないだろ。
「参照カウンタ方式なら循環参照には気をつけろ」でおしまいだ。
673 :
デフォルトの名無しさん :2005/05/07(土) 18:05:41
>>672 わざわざ使わなきゃそんな問題起きないよってことでFA?
>>673 いいえ。
「参照カウンタ方式なら循環参照には気をつけろ」がFAです。
675 :
デフォルトの名無しさん :2005/05/07(土) 18:10:38
676 :
デフォルトの名無しさん :2005/05/07(土) 18:16:22
つうかたかがポインタごときに 多数の亜種意識して使い分けるのがマンドクサ・・ だったら使わなきゃいいじゃんとか言われそうだけど 使うか否かの判断は、そいつをよく知った上でなきゃ出来ない訳で・・ 例えば、100種類のスマートポインタ型があって この場合はアレ使って、この場合はコレ使って、これはあんまり有用じゃないからパス・・ 考えただけでウザ。
678 :
デフォルトの名無しさん :2005/05/07(土) 18:22:50
中国人が作ったSTLを使いたい。
679 :
デフォルトの名無しさん :2005/05/07(土) 18:29:25
>>677 俺が独自に用意したnakatake_ex_auto_ptrを使えばいいよ
>>679 __wada_akiko_nantoCD_uriage470_ptrとどう違うの?
682 :
デフォルトの名無しさん :2005/05/07(土) 18:34:21
「私たちのアプローチは有効です。-プログラミングの初心者にも」 「さあ、はじめよう」 とか冒頭で言っちゃっているけど、 "Accelerated C++"って、初心者が読んで理解できるのか? 初心者時代の俺がこの本で入門したら挫折すると思う。 と、ふと思った。
boost::shared_ptr も良いけど、俺は Loki::SmartPtr の方が良かったなぁ。
>>682 「私たちのアプローチは有効です。-- (もし理解できるのであれば)プログラミングの初心者にも」
> "Accelerated C++"って、初心者が読んで理解できるのか?
多分 No だろうね。もちろん例外はいるけれど。
つまり "Accelerated C++" + 初心者 = 豚 + 真珠。
684 :
デフォルトの名無しさん :2005/05/07(土) 18:49:49
>>680 俺が独自に用意したnakatake_ex_auto_ptrの方が優秀に決まってるさ
685 :
デフォルトの名無しさん :2005/05/07(土) 18:54:37
>>683 だよね。C++は4年やっているし、STLもそこそこ使っているのに
ACは結構難しいところがあるんで、おれがヤバイのかとちょっと思った。
でもなかなかいい本だ。基礎固めに。
686 :
デフォルトの名無しさん :2005/05/07(土) 18:57:21
>>683 初心者 = 豚 + 真珠 + "Accelerated C++"
687 :
686 :2005/05/07(土) 18:58:09
間違えた 初心者 = 豚 + 真珠 - "Accelerated C++"
689 :
デフォルトの名無しさん :2005/05/07(土) 19:34:18
>>688 統計でもとってヤバイとか言ってるのか?
LISPerのおれから言わせるとどの本も笑止
691 :
デフォルトの名無しさん :2005/05/07(土) 19:38:11
>>688 ただ、お前が好きな方向なだけだろ?
俺は3DやPS2、GC、無線通信、DB、ドライバ製作と色々やってきたけど
そんなもんしらんぞ。
やっぱLISPやってる人ってすごいなあ。
>俺は3DやPS2、GC、無線通信、DB、ドライバ製作と色々やってきたけど たしかに、こんだけちゃんぽんすればまともにやる暇なんてないかもね。 何回転職したんだか。
>>693 確かに言語の勉強するくらいなら
技術の勉強をしたいっていう話はあるよね。
>>691 はそういうこと言いたいんじゃない?
696 :
691 :2005/05/07(土) 20:30:28
どこの現場でもみたことないし、テンプレートなんて使ってる人自体めずらしいのに 4年でそれはヤバイとか、プログラミング初心者だとか、まあ色々とフカシ過ぎなんじゃないの? って言いたかった。 俺も転職回数多いほうだと思うけど、テンプレートなんて現場にほとんど浸透してないよ。
>>696 > テンプレートなんて現場にほとんど浸透してないよ。
そりゃ C++ の練度が低い職場にいるからだろ。
もっとも、C++ の練度が低い = 駄目な職場、とは限らんが。
そうか? std::vectorもstd::stringも使わない現場なんて、ダメっぽい気がするが。 まぁ、ダメな技術者なら吐いて捨てるほどいるがな。
>>698 マ板を見てるとCっぽいC++のが多いのかもわからんな。
マイクロソフトの作ったクラスだけ使う人とか。
701 :
デフォルトの名無しさん :2005/05/08(日) 00:26:04
ここって、ちょっと謙ってりゃ調子にのる
>>698 みたいな輩多いね。
バカまるだし。仕事もできないだろう。
>>701 なんのために誰にむけてプログラム書いてるかわからないよね?
stlもわからない馬鹿。
boostもわからない馬鹿。
って自分が知ってることがさも常識みたいにいってすぐに相手を馬鹿呼ばわり。
こんな姿勢じゃ自分のプログラムを読めない人なんてみんな馬鹿なんだろうね。
誰に読んでもらう予定も無いから、プログラムなんて動きゃいいんだろうね。
こいつらと仕事することになったら、
一体どこまでできれば普通で、何がわからないと馬鹿なのか、
是非、説明書を掲示しておいてほしい。
テンプレートなんてプログラマのスキルからすりゃ所詮、戦術レベルだよ。
どう組んだって動けば問題ないんだ。バグればみんないっしょ。
大事なのは設計。
>>641 がいいこと言っていると思うんだけどな。
世の中には色々な職場があって、
それぞれの職場でどのようにC++を使っているかは全然違う。
いつもageている人の職場のように、
C++をオブジェクト指向がサポートされたCとして使う職場もあれば、
STLとかboostとかを少しずつかじって使うような職場(うちの職場)もある。
そして、adobeのようなboostを活用しているような会社も実際に存在している。
どの職場もおそらくちゃんとうまく機能しているのならそれでいいじゃん。
他のところの人にこんな風に文句言うのなんて、
通りがかりの人に喧嘩売ってるのとかわんなくない?
> adobeのようなboostを活用しているような会社 どうでもいいが、ここに感動した。
>702 >テンプレートなんてプログラマのスキルからすりゃ所詮、戦術レベルだよ。 Modern C++ Designを一度読んだほうがよろしいかと…… 設計というものの困難さがどのようなもので、テンプレートが設計に対して どのような影響を与えているのかわかると思うよ。 戦術を知らずに戦略(設計)なんか立てられないよね。
>>705 お前の軍は軍師が一番強いのか・・・そうか・・・
707 :
デフォルトの名無しさん :2005/05/08(日) 02:50:49
オレメモ:sceped_ptrにboost.threadをつっこんだらゾンビができるぞ!あはははは
>>705 702じゃないが、テンプレートがなくても設計できるんじゃね?
影響とかいわれても、それはただテンプレートという機能に
振り回されてるとしか思えないが。
まともなプログラムが書けていればいい、というのは全くもって正しいんだけど、 いろんな技術を知ってた方が視野が広くなっていいんだよな。 STLは既に言語の標準規格だし、どちらかというと知ってた方が良いものだと思う。 と、Cの標準ライブラリすら使えない環境(組み込み系)の仕事もやってる俺は思う。 引出しが多ければ制限された環境でも取れる手段が多くなるよ。
クラスがなくても設計できるんだけど、クラスという機能に 振り回されてる俺が来ましたよ。
>>710 しかし、一方で技術に振り回されてしまっている人間もいるな。
このスレの人間みたいに。
金槌をもったらなんでも叩いて解決したくなる厨房そのものだなw
テンプレートを使うことの方が重要で、設計なんて考えた事すらなさそうだよ。
>>711 それは別だな。
設計理念に足りないからできたものがクラスだ。(まあ、無くてもなんとかなるはなるが)
テンプレートはあくまでもマクロの延長。
覚えたばかりのことは使いたくなるものさ。 でもそのうちに使える場面と使いにくい場面がわかるようになってくる。 知ってるもののうち、その場で一番使えるものがどれかをうまく選べるようになれればいいのさ。
>>714 まあ、そうだが。
可読性を重視したときに、同僚が使い慣れないテンプレートを使うという
選択肢が果たして残っているかどうかは疑問ではあるがな。
テンプレートはマクロの延長みたいなものだが、 その先にSTLやらboostみたいな世界が広がってたわけさ。
>>708 ・・・
単にデストラクタが呼ばれる前にjoin()呼べってだけで
scoped_ptrは関係ないだろ。それは。
>>717 俺は
~も知らない=レベルが低い
的な発言(
>>698 みたいなの)を取って言ったんだけど?
720 :
698 :2005/05/08(日) 03:50:48
むぅ、漏れは「知らない」とも「レベルが低い」とも書いてないのだが。 >696-697の流れを受けて、テンプレートを使わないの職場はダメっぽいと言いたいだけ。 そんな職場でも知ってる香具師はいるだろうし、 使えなくても高レベルなプログラムを書く香具師もいるだろう。 ダメな技術者は知識の有無やレベルの高低に関わらずダメだと思うがそれは別の話だ。 余計なお世話だったか。
>>720 そう?
>>698 の文章はとてもそうは読め無かったよ。
後から発言の軌道修正するのも限界があると思うよ。
まあ、
>>698 に限らずそういう発言(テンプレートが使えない=レベル低い)はあったからね。
今更、
>>698 がどういうつもりだったかなんて大して重要じゃないけど。
>>717 >>705 がテンプレートに振り回された意見を言ってますよ
もろに設計に影響を与えているそうです
あのー、そんなこと聞くなと言われそうですが、 プログラミング言語C++のp397、真ん中のへんのコード max(2.7, 4); //max(2.7, double(4)) というのは間違いですよね? max(double, int)があるんだからそっちが呼ばれると思うんですが。 というより実際に作ってみたらこっちが呼ばれたんですが。
そんなこと聞くな
726 :
デフォルトの名無しさん :2005/05/08(日) 10:40:58
執筆当時は max(double, int)のオーバーロードがなかったんじゃないか?
727 :
デフォルトの名無しさん :2005/05/08(日) 11:01:39
>>720 「STLやデザインパターンを使いこなしている⇒ 最強の将棋AIを書ける人 ∧ 最強のレンダリングエンジンを書ける人」
という命題が真ならば、おまえの話を聞いてやろう。
STLってそんな高度なプログラムか?俺はSTLの存在を認識する以前から似たようなライブラリを発明していたぞ。
ニコラウス・ヴィルト+ジェネリック思想程度を持ってりゃ一般的に行き着くとこだろ?
つまり今時、CS系大学卒業までに習う程度の基礎的知識だよ。
「STLを知っている」ことがおまえのアイデンティティか?
そしてそれは他の技術者を卑下する十分必要条件だとでも思っているのか?
だとしたらそれは極めて低レベルな脳だということを指摘しておこう。
>>726 そんなことあるのかという気もしますけど、でもそういう感じの理由なんでしょうか。
原著のでも訳書のでも正誤表に載ってなかったんで少し不安だったんですが、
安心しました。ありがとうございます。
>>725 ちょっと好き
なにを熱くなってるのか理解できんが、STLを理解してるのがえらいんじゃなくて、STLも理解できてないのがクズってだけだ。
お前ら全員落ち着け。
何か、変な周波数でわめいてるのがいるね。 今日は涼しいからそういうのも大人しいと思ったのに。
>>728 これは、maxの多重定義の中で、max<int>() と max<double>() のどちらを
どのように呼び出しているかを、問題にしていると思われ
お前ら全員出て行け。
>>733  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
|
____.____ |
| | | |
| | | |
| | | |
| | | |
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ
|
ミ ∧_∧
( ´Д`)
⊂ つ
/ / /
し' し
( ゚д゚)ウッウー
日本の某C++メーリングリストを見てると テンプレートに振り回されてるなって思う。
どこよ?cppll?
738 :
デフォルトの名無しさん :2005/05/08(日) 12:12:43
馬鹿はどうやっても、設計や実装に失敗するんだけど、 言語の機能のせいにすれば、気が晴れるんだろう。 機能の限られた言語で失敗したら自分のせいだから、 本当は助かってんじゃないのかな、言語のせいにできて。
740 :
デフォルトの名無しさん :2005/05/08(日) 12:14:49
お前がバカだというのは良く判ったから、 とにかくスレを端から全部荒らして回るのを止めろ さっさと引き篭もれよバカ
741 :
デフォルトの名無しさん :2005/05/08(日) 12:14:51
機能の限定された言語…関数と再帰とif文のみ実装している言語だな。
>>740 何?
自分と違う意見の人を同一人物だと思うのは辞めたほうがいいよ。
俺も起爆剤なだけで後は勝手に議論が進むことのが多いし。
743 :
デフォルトの名無しさん :2005/05/08(日) 12:21:16
中卒プログラマー(COBOL専門)が必死に荒らしたおかげで、 板人口が極端に少ない掲示板(ぷぷぷ
744 :
デフォルトの名無しさん :2005/05/08(日) 12:23:56
さとうたまをの芸風が、どんどんバカっぽくなっている件
745 :
デフォルトの名無しさん :2005/05/08(日) 12:44:25
>>742 > 自分と違う意見の人を同一人物だと思うのは
君の妄想はある意味おもしろいです。
レスにコードがないと伸びる
レスに記述できるコードなんて、 サンプルコードの断片に過ぎない事が 理解できていない痛い香具師
748 :
705 :2005/05/08(日) 13:29:15
ああ、こんなところで『「ほげ言語」のパラドックス』見るとは思わなかった…… パワフルな機能を使いこなせないからと言って、機能そのものを否定する のはな……べつにテンプレートが使いこなせないからと言ってSTL自体が 使いこなせないわけじゃないだろうに。 >713 テンプレートには「安全にGenericsを実現する」という設計理念がありますが。 『C++の設計と進化』でも「テンプレートのルーツは、コンテナクラスに入れるものの タイプをパラメータ化したい、という願望だ」とありますな。 >723 もろに設計に影響を与えておりますが……STL
話の流れと関係無いけど、ポール・グラハムの文章は話半分で読んでおいた方が良いと思うよ。
>>747 また占い師みたいなことを。
痛いとか言うあたり、ほんとにショックだったみたいだな
テンプレートを使わないで挑む→ →ダウンキャストを使い始める→ →理解できないコード
754 :
デフォルトの名無しさん :2005/05/08(日) 16:10:38
>>753 テンプレートを使わないとダウンキャストを使わなきゃいけない設計が腐ってる。
そもそも設計が腐ってるのにテンプレートで辻褄を合わせようとする
その姿勢を修正した方がいいということに気が付かないのがあまりにもマヌケでFA
>>753 ダウンキャストをテンプレートで回避するケースって、どんなの?
>>755 そんな腐った設計する奴の頭の中は理解しないほうがいいぞw
まさに馬鹿がうつるw
template< X > D : B<X> { D() : B(*this) {} //こういうのは? };
まぁモチツケよおまいら
>>762  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
|
____.____ |
| | | |
| | | |
| | | |
| | | |
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ
|
ミ ∧_∧
( ´Д`)
⊂ つ
/ / /
し' し
764 :
デフォルトの名無しさん :2005/05/08(日) 17:55:00
日本語文字列はどのように扱えばよいのですか?
>>764 マルチバイトでstd::stringでもワイドでstd::wstringでも
お好きなように
テンプレートも分からないバカが多いせいで テンプレートの使用が禁止されるのはよくある。 しかしアセンブラも分からないバカが多いのに アセンブラは禁止されることは無いのはなぜだろう?
>>766 そりゃお前、CPUID命令を使いたきゃそれっきゃねぇからだろ。
>>766 そりゃ、発言力の大きなロートルさんの好みでしょ。古い人は
アセンブラは出来るから。
>>754 ,755
コンテナの話だろ?
テンプレートも使わず、javaとかみたくダウンキャストも使わずに
どうやってコンテナを作るのか知りたい。
770 :
755 :2005/05/08(日) 20:36:53
>>769 なるほど。そういうことか。
じゃぁ std::qsort と std::sort も当てはまるな。
ということは >754 は
「アルゴリズムを、データ型とは分けて部品化したい」
という姿勢を修正すべきだと考えていることになるのか?
どう修正すれば良いのかさっぱりわからんな。
>>769 #define DEFINE_VECTOR(VECTORNAME,TYPE) \
class VECTORNAME { ... }
DEFINE_VECTOR(int_vector, int);
DEFINE_VECTOR(voidp_vector, void*);
・
・
・
772 :
769 :2005/05/08(日) 21:38:58
>>771 テンプレートより優れてるところってあるのかな?
というか基本的にやってることは一緒だよね。
可読性がいいとも思えないし。
もっとよい答えがほしい。
>>754 の降臨に期待。
来るわけ無い
774 :
デフォルトの名無しさん :2005/05/08(日) 21:49:58
はぁ?つーかお前等ダウンキャストの意味はOKか? 基底クラスから派生クラスへのキャストをダウンキャストと呼ぶ これはいいよな? 基本的に基底クラスから派生クラスのキャストなんてしたら危ないじゃん。 やるなよ。やらなくていい設計にしろよ。
>>774 > やらなくていい設計にしろよ。
アルゴリズムの汎用化は、やるなって結論で OK?
>>775 いや、問題が出ずにできるならそれでいいけどさ。
この場合って設計がキタネェから起きる問題だろ?
テンプレート使わずに、ある程度汎用性のあるコンテナを作ろうとしたら 一番大本になる基底クラスのポインタを格納するコンテナを一個作るぐらいしか あまりいい方法が無い (そういうクラスがあるという前提な、Javaはそうなっていたような・・・) それで、コンテナから取り出したポインタは基底クラスのポインタになるから dynamic_castで目的のクラスにダウンキャストしてから使うと
>>777 >dynamic_castで目的のクラスにダウンキャストしてから使うと
これ、設計がまずい。
そもそもまとめるべきでないものをまとめてしまっている。
汎用性を求めるあまりに言語で「やるな」と言われてるもんの
制限までとっぱらってしまってお前等は何がやりたいんだ?
そんなに汎用性がほしけりゃ全部void*で運用すりゃいいじゃん。
なんのために型があるのかすっかりわすれてしまっている。
テンプレートに振り回されてるいい例だな。
はあ? テンプレートを使えば、そんなことしなくていいけど テンプレートを使わないで、同じような利便性を得ようとすると そうなるっていってるだけやん 別に配列と、new Hoge[] だけで、全部やれば問題ないよ それがイヤなだけで
>>779 要するに設計が腐ってるのをテンプレート使って誤魔化してるんだろ?
腐ってない設計を教えてください
782 :
705 :2005/05/08(日) 22:27:27
>776 汎用のコンテナを設計するときに ・設計の段階で決定できるもの:アルゴリズム ・設計の段階で決定できないもの:格納するオブジェクトの型 つうことなんだけど、C++の場合、テンプレートとマクロ以外には(777の通り) 型を決定せずにアルゴリズムを構築することはできないんよ。 ……やっぱりModern C++ Design よめ。訳者まえがきから一章まででいいから。
>>777 せっかくいい番号踏んだんだからバカはスルーしる
まあ、汎用のコンテナが本当に必要なのかってことだよな インターフェースをまとめられないの?って思うコードもちらほら
当然必要。データ構造はプログラムの基礎だろ。
リンクリストが必要になったとき毎回いちいち作るのか? 馬鹿すぎ
788 :
769 :2005/05/08(日) 22:33:59
>>778 void*使った方が危険な方な気がするが。
void* からの static_cast と
dynamic_cast を使ったダウンキャストで、
危険なのは明らかに前者だが(後者は失敗したことがわかるから)。
そもそもdynamic_castは言語として「やるな」なんて言われていない。
そして、
>>779 で指摘されているように
テンプレートを使った場合は上の問題は起こらない。
なぜなら、
>>778 のいっている
>そもそもまとめるべきでないものをまとめてしまっている
ということがそもそも起きていないから。
というか、
>>778 で言っている汎用性っていうのは
javaにあるような共通の基底クラスによってもたらされるものであり
C++のテンプレートによってもたらされるものとは全く違う。
まずそこをはっきりさせてから議論を展開してほしい。
>>780 人の話はもう少ししっかり聞いた方がいい。
だから荒れるんだ。
789 :
728 :2005/05/08(日) 22:34:10
>>732 あ…っ。分かりました…。ストラウストロゥェプ先生はつまり、
最終的にmax(2.7, 4)というコードにはmax<double>が適用されるのだ、
ということが言いたかったんですね。
max(double,int)とかの関数宣言(定義)は、どうせインライン化されるからそんなに意味はないと。
ありがとうございました。
>>787 必要なものを強引に押し切るというならvoid*とどう違うのか説明キボン。
>>788 俺はこれが誤魔化しにみえちゃうんだよね。
設計の悪さに目を向けないであえて強引に突っ切っちゃうあたりが。
正直、ダウンキャストなんか使ってるソースみると「妙なことしてんなー」って思うよ。 型の制限があてにならないから可読性も当然下がるしね。
ちなみに、どう設計が悪いのかぐらい言え なにせ、ここでは誰も何にも設計などしていないんだw 設計が悪いといわれても、何のことやら
787じゃないけど >790 『必要なものを強引に押し切る』というのが何なのかわからんが、 テンプレートとvoid*じゃ型安全性が全然違いますがな。 そんなに未定義の領域に突っ込みたいのか? >791-792 だからテンプレート使えと。
デンプレートでvoid*使えば解決
>>793 これは個人の感覚にゆだねるしかないからね。
できちゃえばOK。エラーがでなけりゃそれでよしとするならいいんじゃないの。
俺がこだわるのは型の制限かな。
関数の引数から基底のクラスがよばれていたとしても
それは皮を被ったオオカミで中ではちゃっかり派生が呼ばれてるとかいう、
ある意味グローバル変数みたいな問題が起きちゃうからね。
俺はこういうのを絶対許さない性質でね(のちのち問題がおきるのわかってるから)
おまい、レイトバイディング(virtual メンバ関数)も使ってねえの? 別にそれでプログラム組めるけどさ
>>797 はじめは使ってたんだけど。
バグが出たとき結構これで苦しんでね。
今は多分使ってない。
よく考えたら必要無いことに気づいた。
使っても大して楽にもならんし。
問題でると地獄だし。
>>796 型の制限こそテンプレートの最大のメリットだと思うのだが。
ろくに知識が無い奴だとわかったので めでたく解散
801 :
788 :2005/05/08(日) 22:51:38
>>791 これって何?それがどう誤魔化しに見えるの?
何が言いたいのかわからないです。
お願いだからちゃんと議論しようよ。
テンプレートの最大の汚点はエラーメセージが意味不明になることだ マクロでもそうだが。 デバグ困難
通常なら関数呼び出しのところで、型不適合エラーがでるところを テンプレートを使うと、しばしばテンプレート関数の中や、 クラステンプレートのメソッドの中でコンパイルエラーが出てしまうのもこまりものだ しかも、やたらに下位の関数の中でコンパイルエラーが出たりする
804 :
デフォルトの名無しさん :2005/05/08(日) 23:12:14
>>796 >中ではちゃっかり派生が呼ばれてるとかいう
?
派生で新たに実装された内容で処理されたら問題が起きる
設計の方が問題じゃないのか?
>>796 についていえば、継承とかはいらないってことだよな
何でC++なんて使ってるの?
名前空間が使いたいから?
STLが使いたいから。
inlineが使いたいからとか
>>805 お前にとってのC++はそれがすべてかw
const_iteratorが const_castでiteratorに出来ない件について。
むしろiteratorをconst_iteratorにできないことのほうが
>>778 は馬鹿だから相手にしない方がいいのでは?
816 :
デフォルトの名無しさん :2005/05/09(月) 00:30:35
>>816 そういう方向でスレを埋めるのは荒らしじゃないの?
今日書いてんの、全部荒しでしょ。
通りすがりは免罪符ですか 恐れ入りました
逆にテンプレートに欲しかった機能あるか? おれは構文(せめて{ ~ }ブロック)もテンプレートに入れてほしかった。 boost::lambdaとか書いてて惨め過ぎる。
>>820 2パラメータ以上とるテンプレートの特殊化
template< class a, class b > f(...
でbだけを特殊化したいときとか。
実際方法があって自分が知らんだけかもしれんが。
また、
template< uint_t n > uint_t factorial(){ return n * factorial< n-1 >();}
template< > inline uint_t factorial<0>(){ return 1;}
これをこう出来るようにして欲しい。
template< uint_t n > uint_t factorial()
{
if( n > 0 )
return n * factorial< n-1 >();
else
return 1;
}
もしくは
template< uint_t n > inline uint_t factorial<n<=0>(){ return 1;}
出来ない理由がわからん。
824 :
デフォルトの名無しさん :2005/05/09(月) 02:23:10
なによりもまず、オートポインタなんていう小手際のテクでなく、 ラディカルにガベージコレクションをサポートすべきじゃないか? GC用コンテナとグローバルなリンクリストが一つあれば何とかなると思うが。
そしてC++は、Lisp|Smalltalk|Java|C#にまた一歩近づきましたとさ
GCではどのみちスマートポインタ系クラスの持つ「デストラクタによるリソースの確実な開放」は実現できない。
827 :
デフォルトの名無しさん :2005/05/09(月) 02:57:09
メモリリークが0%なんて、小規模システムならともかく、人間業ではないわけだから、 必然的にFire and forget である方向に向かうだろうしそうすべきであると殆どの人が同意すると思われる。 現状ではまったくフェイルセーフじゃないもんね。
質問があります。STLのsetで、 std::set<CHoge> hoge;と宣言したときに hoge.find()の引数にCHoge以外の型の変数を渡すことはできないのでしょうか? CHoge::operator<()をオーバロードしてみたりしたのですが、 うまくいかなくて…。
>>827 Windowsだとメモリリーク検出関数みたいなのあるじゃん。
あれで0%にできるよ。
>>827 > メモリリークが0%なんて、小規模システムならともかく、人間業ではないわけだから、
サーバサイドのプログラムを C/C++ で行ってる人間なんて
ザラにいるわけだが……。
なんの支援もないCでもリーク0にできるだろ。 リークするのは大抵使い方間違ってるとき。 COMでのリークなんかはその典型。 つまり設計が悪い。
>>831 設計が悪いんじゃなくて、書いた奴の頭が悪いんだよ(笑)
>>822 クラステンプレートなら可能。
関数テンプレートの場合はオーバーロードとの兼ね合いがあるので難しい。
どうしてもやりたいのなら、クラステンプレートの部分特殊化を用い
そのクラスのstaticメンバ関数を使うなどで対応は可能。汚くなるが安全。
834 :
デフォルトの名無しさん :2005/05/09(月) 14:20:24
mapのfindで見つからない場合はかならずend()が帰ってくるのでしょうか? MSのtoolkit2003のclではうまくいくのですがボーランドのbcc32でコンパイルした場合、見つからない場合でもend()にならないのですが
> ボーランドのbcc32でコンパイルした場合、見つからない場合でもend()にならない んな馬鹿な
ことがあるか
>>824 ガベージコレクション
ガベージコレクション
>>824 素人投稿学園コレクション
SMマニアックコレクション
>>828 CHogeから派生した型のインタスタンスなら
>>840 なるほど!一つ勉強になりました。
とりあえず今日一日考えて、setではなくmapを使うことにしますた(つД`)
一応、派生型も格納できるけども、スライシングされるんじゃ? ボインタで格納して、使用後に一個つづつdeleteしてくしかないんじゃなかったっけ?
格納するんじゃなくてfindの引数にするだけだろ。
ガッ
>844 ゴリッ
初心者向けのSTLの本を教えてちょ
849 :
デフォルトの名無しさん :2005/05/10(火) 18:25:36
850 :
822 :2005/05/10(火) 21:44:52
>>849 部分特殊化は理解しました。
しかし条件演算子がわからない。
教えて!おねがい!おねがい!おねがい!
>>850 スマソ
俺の脳内コンパイルは通ったがBCC32は通らなかった。
template<uint_t N>
class factorial
{
static const uint_t Val = N ? N * factorial<N - 1>::Val : 0;
};
template<bool flag ,class R,class T> struct hoge { T t_; hoge(T const& t) : t_(t){} R operator()(T t) //ファンクタ {return t_ = t_ + t;} }; template<class R,class T> struct hoge<false,R,T> //<- 条件演算子ってたぶんコレのことと思う。 { T t_; hoge(T const& t) : t_(t){} R operator()(T t) //ファンクタ {return t_ += 1 / t;} }; int main(){ hoge<true,long long,int> z(0); // true だと足し算(上) hoge<false,double,double> z2(0); // false だと別のなんか(下) for(int i=1;i<10000;i++) z(i), z2( (i%2) ? i : -i); cout << z.t_ << " " << z2.t_ << endl; }
>>852 条件演算子は3項のa ? b : cの演算子のこと。
854 :
デフォルトの名無しさん :2005/05/11(水) 01:51:40
>>852 意味がわかるまで5分かかったよ。
一般的な話としてだけど、<false, R, T>のような特殊化してまでクラス名を同じにする理由がわからん。
855 :
デフォルトの名無しさん :2005/05/11(水) 05:29:16
Modern C++ Design って本どれくらいで読破しました?俺ダメかも。本の解説読みながらでさえソースコードの読解に小一時間かかる。 デザパタの存在すら知らない人が、何も知らずにこんなソースコード読んで理解できるのか? 偏執的デザパタだらけのフレームワークを使っている会社に間違って就職したら(そんな会社があったら)、 三日で辞めます。 templete< templete< class > class factory< templete< bool F, templete< T<true, class S > class singleton > class SaitamaFactory >, templete <> class DeallocatorShanghaiStyle > class AssosiativeFactory : public factory, public DeallocatorShanghaiStyle (↑適当)とかやられたらもう気が狂うし。
C++の文法知らない人間が読んで理解できなくても問題ないのなら、デザインパターンを知らない人間が読んで理解できなくてもまったく問題ないと思うんだが。
857 :
デフォルトの名無しさん :2005/05/11(水) 05:59:46
>>855 お前はデザパタに難癖付ける前に、
templateの綴りくらい正確に書けるようにしとけ。
次にtemplateのコード例を正確に書けるようになってから、
Modern C++ Design嫁。
頭悪過ぎ(・∀・)
お前必死すぎるぞ。職場で嫌な目にあったのか。
>>855 templateの文法/意味に慣れてないだけだろ。
もう少し慣れ親しんでから読めばすんなり理解できるはず。
それから、デザインパターンに付いての予備知識はまったく必要ないと思う。
本文中で解説されてるし。
templete (添付リート)
実際にtemplate使うときは適切なレベルでのtypedefが必須になるんでそう見づらいということはない。 typdefとデフォルト引数展開されたら std::map<std::string,std:;string>程度でも鬼みたいな型になるしな。
いまさらC++使う意味がわからん よく最適化されたCコンパイラで十分
いまさらC++使う意味がわからん Cでオブジェクト指向で十分
C++って場所とるんだよ よく最適化されたK&R Cで十分
C+プリプロセッサでオブジェクト指向書いた事あるけど、 あれはプリプロセッサで構文糖つくるのが面白いだけ。 プリプロなしでオブジェクト指向書くのは、苦痛以外のなにものでもないし、 まして他の人にメンテ任すのも困難。 つまり、「言語自体がオブジェクト指向をサポートしている事が重要」 (Robert Meyer)なんだよ
「C++は十分にオブジェクト指向をサポートしているとは言えない」(俺)んだよ
>>867 ほー。もっと具体的に。
「Fortran77で、並列計算機用に、しかもオブジェクト指向もどきで書かされた自分」には、
「C++は幾分マシなマルチパラダイム言語」ですが何か?
そもそもテンプレートは関数型から派生した物であり、 これはオブジェクト指向とは相反する概念。 C++は無理矢理テンプレートを組み込まれたせいで、 恐ろしく中途半端な物体になった。なにこれ? BOOSTのような奇形ライブラリを喜んで使う奴は基地外と言える。
逆を言えばboostのようなものが出てきた段階で C++の設計は失敗だったということだね。
テンプレートが気に入らなきゃ使わなければいいだけだろ
たしかに、C++はオブジェクト指向言語とはあんま言いたくないな。 別の概念が複雑に入り組みすぎてるし。なんだろうね。 俺が思ってるC++がCに勝ってる利点てautoデストラクタの存在ぐらい。 Cでfinallyが使える処理系ならそっちで組んだ方がむしろ保守しやすい。
テンプレートが無ければC++使う気にはなれんよ
>>872 C++をオブジェクト指向言語として考えるから駄目なんだよ。
オブジェクト指向プログラミング「も」できるようになっている言語として思っておけばいい。
相談室スレで相談以外のことをするなら せめて許せる程度に面白い話をしろ。
>869 相反する概念じゃなくて、直交する概念なんだけど…… 『テンプレート使ったらオブジェクト指向が使えなくなりました』つうわけでもないだろうに。 相反するのはむしろテンプレートとマクロのような気がします。
俺様がオブジェクト指向言語ひまわり二号をつくってやるよ。 楽しみにしておけ。
出来上がるまで黙ってろ
日本語コンパイラかよ!
実際よー。テンプレートの乱用には困ったもんだよね。 テンプレート厨房になっちまった人は、テンプレートをしばらく禁止にしてみるとか して組んでみる期間を作ったほうがいいよ。 知らずのうちにテンプレートを使うことばっかりに固執してオブジェクト指向で 考えること辞めちゃってるとかホント致命的だから。 それとは別にオブジェクト指向を覚えられないからテンプレートばっかり凝ってるって人 ほんとにいるから怖いよ。
過ぎたるは猶及ばざるが如しだね。 でも、STLっていう道具は上手に使うと便利だよね。
STLっていう道具は上手に使わないとorzだよね
ってことは馬鹿と鋏は使いよう?ちょっとずれてるかも。
>>874 ふつー、そう思ってるだろう。
テンプレートもOOPっぽい部分も、Cの拡張の一部。
>>875 どうせ重複スレの使い回しだ。気にすんな。
885 :
デフォルトの名無しさん :2005/05/11(水) 23:24:46
実際よー。OOの乱用には困ったもんだよね。 OO厨房になっちまった人は、OOをしばらく禁止にしてみるとか して組んでみる期間を作ったほうがいいよ。 知らずのうちにOOを使うことばっかりに固執してMixInで 考えること辞めちゃってるとかホント致命的だから。 それとは別にtemplateを覚えられないからOOばっかり凝ってるって人 ほんとにいるから怖いよ。
逆はなんか違和感あるな
テンプレート乱用→キチガイ OO乱用→普通
乱用してんだから、どっちもキチガイだと思うが
使いたてOO厨によくある傾向だよ
そもそもオブジェクト指向でなければいけないというのが思考停止。
御意
「オブジェクト指向」って、OSでいう「Windows」みたいな登録商標だよな C++の「オブジェクト指向」部分なんてごく一部でしかないのにいつもそれが強調される
ちょっと違うな。 まあ聞き流してやってくれ。
895 :
デフォルトの名無しさん :2005/05/11(水) 23:37:22
何かもう嫌になってきた。ほんと、この板住人頭悪いやつ多すぎ。
>>869 > そもそもテンプレートは関数型から派生した物であり、
はあ?
オペレータオーバーロード、関数多重定義が、
generic functionから来たって事を言いたいわけ?
クラステンプレートは関数型とは何の関係もないよ。
>>897 マクロの延長はマクロの延長らしく使えってことだな。
>869 もしかして『関数プログラミング』の間違いでしょうか……
900 :
デフォルトの名無しさん :2005/05/12(木) 00:23:58
なんか勘違いしている人がちらほら。
関数型言語ってこの板で厨房を釣るぐらいの用途しかないよな
標準テンプレートライブラリ 【STL】 C++言語の標準テンプレートライブラリ。C++でプログラミングを行なう際によく使う汎用的な データ構造やアルゴリズムを、利用しやすい形でまとめたもの。 1992年にHewlett Packerd社のAlexander Stepanov氏、Rensellaer工科大学の David Musser教授らのグループによって考案され、 1994年にANSI/ISO標準C++ライブラリの一部として採択された。 STLに限っては別にオブジェクト指向に基づいてとかそんな考えはなさそうだな。 あくまでもよく使う汎用的なデータ構造やアルゴリズムを利用しやすい形でまとめたもの。
903 :
デフォルトの名無しさん :2005/05/12(木) 00:41:10
>>901 そりゃもうこの板には厨房しかいませんから!
>>893 あいやー。
C++はオブジェクト指向言語だから、オブジェクト指向でプログラムを組むために生まれた言語よ。
みんながC++を叩くのは、オブジェクト指向でなくても組めてしまうってとこよ。
C++はハイブリッド言語
C++はマルチパラダイム言語だっていってるだろこのスカタン
オブジェクト指向言語 → 朝起きてバスにのり電車を乗り継いでいつもどうり目的地へ。 総称プログラミング(テンプレート) → 朝起きて、何だかよくわからない乗り物に乗る。 何だかよくわからないが体がものすごいスピードでバラバラになりつつ目的地で本来の姿へもどる。 次の日の朝は、それとはべつの何だか名状しがたいことがおきてやはり目的地に着く。
なるほど、OOだと日本語が間違っていても大丈夫なんですね。
>>907 高階の論理を「なんだかわからない」と感じる人が結構いるのは確かだから、
通常のコーディングからそこらへんを排除した Java や C# にも妥当性は
あるんでしょうね。
どうしても必要なときには、十分解っている人がリフレクションやバイトコードの
自動書き換えとかで実装すれば良いわけだし。
>バイトコードの自動書き換え バイトコード編集ね
>>910 generics入ってるじゃん!> Java,C#
914 :
デフォルトの名無しさん :2005/05/12(木) 20:19:09
ねぇ、「ジェネリック(generic)」の訳語が「総称」っておかしくないか? 「総称」は直訳なわけだけれども、「汎用」がより適切だと思うが。 しかし、「内包⇔外延」関係の意味での「総称」 であるならばありだと思うけれども、判りにくいよな。
じゃあGeneral→将軍様プログラミング
916 :
デフォルトの名無しさん :2005/05/12(木) 20:40:21
ジェネリックプログラミングがしきりに唱えられ始めたころ、昔から実現されているパラダイムをいかにも新しいものかのように言うのは止めてほしいな、と思った。
それが商売ですから
918 :
デフォルトの名無しさん :2005/05/12(木) 20:43:53
>>916 のレスを見たころ、資本主義って嫌だな、と思った。
俺の仕事は金とほとんど無縁だからなぁ。
>>912 generics は template の持つ機能のホンの1部だし、
generics を「なんだかわからない」と感じる人は少ないと思う。
C++ の template は、通常のコードの1階層上のレベルで(文法はアレだが)
完全な記述能力を持ってるとこに難しさがあるわけで。
(んでもLISPのマクロを「難しい」と感じる人はいないわけだから、
もしかすると単純に「文法がアレ」ってのが問題なのかも知れない)
それは、いつの時代の話? ・Lispの総称関数 ・C++のSTLで総称 ・Java Genericで代入キャストを自動補完(w
>LISPのマクロを「難しい」と感じる人はいない そーか?
922 :
デフォルトの名無しさん :2005/05/12(木) 20:51:20
BREWがしきりに唱えられ始めたころ、Win3.1でさえ実現されている 糞パラダイムをいかにも新しいものかのように言うのは止めてほしいな、と思った。
923 :
デフォルトの名無しさん :2005/05/12(木) 20:53:16
>>919 ~を感じる人はいない というレスに対して感じる人が一人でもいたら成り立たない、という論理になるわけだから、不利な論理だと思うよ。
・ミジンコのようなハードウェアでなんか凄いことできたり、 ・古代の言語は備えていたが、過去の進化で消えちゃってた機能が洗練された形で復活した からウリになるわけで
C++のアレが洗練されてるとは口が裂けても言えない
型無しマクロの世界と比べて、 長足の進歩と言えるが
>>923 そだね。
でも perl 厨にも eval を難しいと感じてる奴はいなそうなわけだから・・・
頭悪いのが粘着してるな
頭の良い最高学歴の私が来ましたが何か質問は?
930 :
デフォルトの名無しさん :2005/05/12(木) 23:46:55
あなたのまんこ暦をうpしてください
質問は?
>>933 そのスレはさ、ただ「次スレ」とだけ書いて貼ることに意味があるんだよ。
偽のスレタイを書いたら、それはただの「嘘」だろ?
そろそろ危ないんで、念のため言っとくが、このスレの次スレは無いぞ。
>>935 どうもこのスレにはあんちが住み着いているようですね
なんと言われようと次スレは作ります。
ぷ 読解力低いなぁ
次スレ建てようと思う奴は
>>562 を否定できる論拠を持っているべきだ。
マルチスレッドでSTLを使い場合__STL_PTHREADSをつけないといけないのでしょうか? STLはスレッドセーフではないのでしょうか?
>>939 実装による。各実装のドキュメントを参照せよ。
C++相談室に統合しようとするやつは >テンプレートライブラリ(STL含む)に関する質問は >専用の別スレにお願いします。 となっていることを解決してから言え
じゃC/C++室へ行こう。
>>941 何がどう解決していないのかさっぱりなんだが。
>945 じゃあ、C++相談室の次スレが立ったら統合な。 STLの次スレには『統合予定』て書いたら?
950 :
デフォルトの名無しさん :2005/05/17(火) 06:30:36
vectorで確保した配列を、 生の配列として関数に渡すにはどうすればいいですか? たとえば vector<unsigned char> bits; を配列として渡したいときに &bits[0] としたとき、これが正常に動くことは保証されていますか?
はい。 vector<bool>以外は。 Effective STL 第16,18項
>>950 assert( !bits.empty() );
953 :
950 :2005/05/17(火) 13:36:55
出典まで書いていただきありがとうございます。安心して使えます。 vectorのサイズはあらかじめ調べた上で使うので大丈夫です。
map< string, int > str_Bufferin str_Bufferin["やさしさ"] = 50; char *sss = "やさしさ"; printf( "%d, %d", str_Bufferin["やさしさ"], str_Bufferin[sss] ); これは両方50が表示されますが、 ::::::::::::::::::::: map< char *, int > c_Bufferin; c_Bufferin["やさしさ"] = 50; char *sss = "やさしさ"; printf( "%d, %d", c_Bufferin["やさしさ"], c_Bufferin[sss] ); こっちは50と0が返るのは仕様ですか?
とりあえず、C言語からやり直すほうが良いかもしれない。
ポインタの基礎からやり直せ
>>954 mapクラステンプレートの第三引数のdefaultは、less<Key>。
これを!strcmpするcomparatorに代えてはどうか?
strcmp < 0だろ。
>>958 mapの外部で文字列の寿命を管理できるなら別に良いと思うけど・・・
>仕様ですか? (´-`)…
>>962 それができるなら、そもそも>954みたいな質問しない気がする。
>>960 はSTLをよくわかってないまま
突っ込んじゃったな。
>>954 これでわからなかったらもっとSTLの勉強をしろ。基本中の基本。
#include <cstdio>
#include <map>
#include <string>
#include <cstring>
struct Less {
bool operator()(const char* s1, const char* s2) const {
return std::strcmp(s1, s2) < 0;
}
};
int main()
{
std::map<std::string, int> str_Bufferin;
str_Bufferin["やさしさ"] = 50;
char *sss = "やさしさ";
std::printf("%d, %d\n", str_Bufferin["やさしさ"], str_Bufferin[sss]);
std::map<char *, int> c_Bufferin;
c_Bufferin["やさしさ"] = 50;
std::printf("%d, %d\n", c_Bufferin["やさしさ"], c_Bufferin[sss]);
std::map<char *, int, Less()> cl_Bufferin;
cl_Bufferin["やさしさ"] = 50;
std::printf("%d, %d\n", cl_Bufferin["やさしさ"], cl_Bufferin[sss]);
}
△std::map<char *, int, Less()> cl_Bufferin; ↓ ○std::map<char *, int, Less> cl_Bufferin; まあどっちでも同じなんだが
>>967 同じじゃないぞ。gccは上のLess()ではエラー。
というか、関数オブジェクトではなくてクラス名を書けって。
969 :
954 :2005/05/18(水) 17:54:11
>>968 スマソ。今"Generic Programming"の§8.1.1を見てみたら、そのように
書いてあった。アルゴリズムの比較基準と、テンプレートパラメータに渡す
比較オブジェクトは違うのね。また、叙述関数(boolを返す関数)の場合
でも()は付けちゃだめなのね。
Borlandの糞コンパイラは上の形式でもエラーなしで通すので勘違いしてた。
つか、何処指してんだか信用できない char * を キーにするのってどうよ?
若気の至りです
>>968 どうでも良いが、Less()はその文脈では「Lessを返す無引数関数」。
Lesson1()
975 :
デフォルトの名無しさん :2005/05/19(木) 23:55:44
ちゅーかさ、俺がほしいのはSTLじゃなくて、 STLにもう1階層かぶせたぐらいのものが欲しいんだよね。 ローカルでちょっと使う場面だとそのまんま使ってるけど、 ~の要素を増やしてとか減らしてとか取得してとか設定してとかやってると どうしてもラッパー作っちゃうよね? そうなるとvectorやlistも別にあってもなくてもいいかなぁ・・・とか考えちゃったりしてw (会社じゃ覚えてる人少ないからむやみに使えないしね) ローカルでちょっと使う場面だとそのまんま使ってるけど、 何か変換かけるたんびに一度固定長の配列に移してstr***系の関数に ぶち込まなきゃならないからそこが面倒でたまんないよね? そうなるとstringも別にあってもなくても(略w
vector使わずにC++やってる会社って…… 微温湯の温さに合わせていると、上がったときに風邪引くぞ。
「ローカルでちょっと使う場面」とか、 「何か変換かけるたんびに」とか、 言っている意味がわからん
>微温湯の温さに合わせていると、上がったときに風邪引くぞ。 誰か日本語に翻訳お願いします。
>>978 身近の馬鹿に合わせて自分のレベルを落とすな、ってコトでしょ。
>>977 その辺りは想像力で補間してやらないと、行数が異常に増えてしまって2chでの会話は厳しい
そんなの余計なお世話じゃないの?
>>980 まずは書く側がまともな短文書くのが先だな。この場合元の文が壊れすぎだ。
&vec[0] とか c_str() とか使えばいいのにな。 ただ巨大なstring作って write(fd,s.c_str(),s.size());とかcout << s ; とかしてやったら内容ちょろっと壊れてるのな。ヒギィ
STLをフルに使ったプログラムで うまくいった例ってあるの?
ほどほどに使うor足元を固める くらいの使い方でいいんだよね?
エディタとしては成功してないな
>>986 例えば、
stringで保持している文字列の中の特定の文字列を別の文字列に置換する
って一度固定長の配列に移さなくても処理できるの?
c_str使っても文字列に変換かけるときって、固定長の配列にいちいち移さなくちゃできないでしょ?
>>991 それは std::string の実装方法によるだろ。c_str()は const char* なので、
多くの実装が std::string の内部をそのまま返している(つまり、最後には
初めから '\0' が入れられている)ようだが。STLportなどのソースを読んで
みると勉強になるよ。
>>991 char *で処理しないといけないわけでもあるのか?
>>991 find_xxx_of()
replace()
997 :
デフォルトの名無しさん :2005/05/20(金) 11:45:50
愛
998 :
デフォルトの名無しさん :2005/05/20(金) 11:46:19
愛
999 :
デフォルトの名無しさん :2005/05/20(金) 11:46:55
愛
1000 :
デフォルトの名無しさん :2005/05/20(金) 11:47:30
愛
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。