[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/29 13:41 / Filesize : 252 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.47【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:14:51 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.46【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1198755167/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

2 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:16:07 ]
>>1


3 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:56:00 ]
引数を取る関数一般の話として、
同じ引数で何度も呼び出しても毎回返値が違う可能性がありますよね。
time()とか。

もし、ある関数に対して「同じ引数ならば常に同じ値を返し、かつ副作用が無い」ことをコンパイラに対して表明できれば、
あるケースにおいては最適化に有利だと思うのですが、
何らかの方法でそれをコンパイラに表明することはできますか?

int f(int x){return x+1;} //同じxに対して同じ値を返す
int main(){
for(int i=0; i<f(99); i+=f(0)) printf("%d", f(1)); //最適化可能?
return 0;
}

4 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 16:04:20 ]
>>3
定数を返す関数ならVC8などで関数がインライン化されてしまう
事はあるが、引数によって戻り値が違う場合は難しいかも。

5 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 16:05:16 ]
>>3
副作用がないことの表明にはならないけれど、C++のinlineはコンパイラにインライン展開を促す

6 名前:3 mailto:sage [2008/01/16(水) 16:11:14 ]
たとえば>>3のf()がやたら複雑な計算を要する場合とか、
たとえ同じ引数に対して常に同じ値を返すとしても、
インライン展開では毎回計算してしまうんですよね?

やはり自分で一時変数を確保しておくのが良いということですか

7 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 16:14:01 ]
賢いコンパイラならそこを最適化できるかもしれないが、
そうでないコンパイラを使うなら、自前でキャッシュを持てばいいだろう。

8 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 16:14:41 ]
>>6
引数の取る数が限られている場合はテーブル展開するのが常識。
引数が実数だとそうは行かないが。

9 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 16:17:32 ]
例えばアッカーマン関数のような何度も同じ整数のペアが
出てくるような再帰的な関数の場合、整数のペアをstd::pairに
入れてキーにしてstd::mapに入れれば劇的に速くなる。

10 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 16:26:44 ]
次の全ての条件に当てはまる関数を一意的な関数と呼ぶ
・グローバル変数を参照しない
・ローカルstatic変数を持たない
・間接参照を用いてローカル変数以外の変数を参照しない
・初期化していない変数の値を返さない
・他の一意的でない関数を呼ばない

こんな感じか



11 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 17:01:31 ]
C/C++は余計なことしないからなあ
memoizeは自分で処理しないといけない

12 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 17:04:05 ]
アセンブラじゃあ開発期間が長すぎる or 開発不可能な
プロジェクトをアセンブラにあまり劣らない速度を保ちつつ
開発を可能にしたのがC/C++

他の言語は必ずどこかで速度や効率を犠牲にしている

13 名前:デフォルトの名無しさん [2008/01/16(水) 17:34:41 ]


14 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:03:14 ]
constexpr待ちsage

15 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:32:40 ]
>>3
__declspec(noalias)とか__attribute__((const))とかないわけではない。

16 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:45:59 ]
前スレ995です。
zlib.hはたぶん大丈夫だと思います。この前には
zlib.hが見つからないってエラーが出てたんですが
どっかのディレクトリにあったzlib.hを/usr/includeに
持ってきたらエラーは消えて現在に至る、と言うかんじです。

glutが足りないんでしょうか。Synapticで
lib-glut3
lib-glut3-dev
glut3
glut3-dev
freeglut3
freeglut3-dev

とかは入れたのですが。。。まだ他に入れなければいけないパッケージが
あるということでしょうか。

17 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:50:25 ]
zlibのバージョンは?
glutが使ってるzlibが足りないとみたんだが。
gzFileはzlibで定義されてるはず

18 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:51:24 ]
つーか、どっかのディレクトリにあったのを自分でコピーするって、、
ちゃんとインストールしてないんじゃないの?

19 名前:16 mailto:sage [2008/01/16(水) 18:58:46 ]
findで調べてみたら
/usr/src/linux-headers-2.6.22-14/include/linux/zlib.h
にあったのでこれを取ってきたのですが・・・
するとエラーが消えたのでこれでいいのかな、と思ったのですが・・

ちゃんとsynapticなりでインストールしなきゃいけないということでしょうか。


20 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:07:40 ]
>>19
そのzlib.hの中に gzFile の定義なかったらハズレ。ちゃんとzlibをイ
ンストールしましょう。
そもそも、ヘッダだけコピーしてもライブラリがなきゃリンクできない
じゃない。




21 名前:16 mailto:sage [2008/01/16(水) 19:20:25 ]
なるほど。。お恥ずかしい限りです。Synapticでzlibっぽいのをインストールしたところ
とりあえずエラーは消えました。ただ
/tmp/ccqSOFll.o: In function `readfile':
cv109.c:(.text+0xa41d): undefined reference to `gzopen'
cv109.c:(.text+0xa5ce): undefined reference to `gzgets'
cv109.c:(.text+0xa5e4): undefined reference to `gzclose'
というエラーが出てしまって…GLUTのライブラリを読み込めていないということでしょうか。
Synapticで
freeglut3
glut
libglut
関連は入れてるので多分大丈夫だと思うのですが。。。

コンパイルするコマンドは
gcc -lglut -lGLU -lGL cv109.c
でいいのでしょうか?

22 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:41:50 ]
-lz

23 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:53:09 ]
#include <iostream>

int main(){
  int x = 10;
  float f = 5.5;
  const int& r = (int)x, &s = (int)f;
  x = 8;
  f = 1.00;
  std::cout << x << ',' << r << std::endl;
  std::cout << f << ',' << s << std::endl;
  return 0;
}
実行結果
8,8
1,5

同じキャストでも元の型と同じ型にキャストすると変数自体へのリファレンス、
違う型にキャストすると一時値へのリファレンスになります。
(int)xの方は最適化が働いているんだろうと思いますが、
このように同じキャストでも結果が違うのは仕様に準拠したものでしょうか?
コンパイラはbccです。

24 名前:16 mailto:sage [2008/01/16(水) 20:09:37 ]
-lz をつけると問題なく動きました。ありがとうございます。
お手数をお掛け致しましたm(_ _)m

25 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:48:20 ]
while(条件){
 処理
 if(条件)
  構造体の宣言を新しく追加 //例えばkouzoutai hoge[0]、hoge[1]、hoge[2]…
}

ってしたいんだけどどうやって書けばいいの?

26 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:50:06 ]
>>3
>>14 の言ってる constexpr ってのが次期 C++ に入る予定。
関数の戻り値をコンパイル時に定数にできる。
ただし、return 文しかない関数じゃないとダメだけど。

あるいは、今でもテンプレート引数と静的メンバ定数を利用して
似たような物を作る事もできる。

複雑な事やろうとしたら再帰するしかない。
制御文も使えないけど、? : は使えるから意外と色々出来るよ。

27 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:53:38 ]
>>25
宣言は追加できません。配列の要素数を増やしたいなら、std::vectorでも使えばよろしいかと。

28 名前:デフォルトの名無しさん [2008/01/16(水) 20:56:19 ]
>>23
同一の型へのキャストはno effectだったという記憶があるような
ないような。

29 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:57:18 ]
>>27
ありがとう。そうすることにします

30 名前:デフォルトの名無しさん [2008/01/16(水) 20:57:37 ]
>>23
つまり最適化ではなく、標準どおりかと
思うような思わないような。



31 名前:デフォルトの名無しさん [2008/01/16(水) 21:04:56 ]
前スレからの続きのunary_functionに関する質問です。
入力
string line = "11 22 33 44";
char delim = ' ';
出力
vector<int> v ← 11,22,33,44 (要素4個のベクタ)
という関数をつくろうとして、それはできたのですが、次に
stringからintへ変換するunary_functionを引数で渡して(1)、上記関数内で
transform()に渡そう(2)としたのですが、上手くいきません。前スレで教えてもらって
(1)の引数で渡すところまではできたのですが、(2)のtransformに渡す所でコンパイル
が通りません。どこが間違っているのでしょうか?

vector<int> line2vec2(string line, char delim, unary_function<string,int> func)
{
色々な処理
tansform(v.begin(),v.end(),v2.begin(),func());
tansform(v.begin(),v.end(),v2.begin(),func);
=>両方ともコンパイルは通らなかったです。
return v2;
}

よろしくお願いします。

32 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:18:07 ]
コンパイルエラー書け。
v, v2の型は何だ。

33 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:21:28 ]
>>23
一時オブジェクトが作られてるね。一時オブジェクトそのものは仕様にあると思う。
コンパイラの警告レベルを上げると一時オブジェクトを作った警告が出せるコンパイラもあったと思う。

34 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:29:21 ]
>>28>>30
ありがとうございます
すっきりしました

>>33
bccでもconstを外すと「一時変数を云々」という旨の警告が出ます。

35 名前:デフォルトの名無しさん [2008/01/16(水) 21:30:11 ]
>>23
VC++ 2008でも同じ結果。
キャストの結果は右辺値(一時オブジェクト)
これは仕様。ただし、同じ型へのキャストはno effect
だったと思うような思わないような。
メイヤーズかなんかの本でチラっと書いて
あった気がする。


36 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:30:25 ]
>>28>>30
ありがとうございます
すっきりしました

37 名前:デフォルトの名無しさん [2008/01/16(水) 21:33:00 ]
>>34
それは標準準拠してないから。
bccは非constリファレンスでも左辺値以外の値を
参照できてしまう。

38 名前:デフォルトの名無しさん [2008/01/16(水) 22:41:31 ]
>>32
すいません。
コンパイルエラー
test.cpp:73: instantiated from here
/usr/include/c++/4.2.1/bits/stl_algo.h:936: error: no match for call to
'(std::unary_function<std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, int>) (std::basic_string<char, std::char_traits<char>,
std::allocator<char> >&)'

vの型vector<string>
v2の型vector<int>
です。

先の関数はこんな感じ() {
int begin, end;
vector<string> v;
begin = end = 0;
while (line[end]) {
begin = end;
while (line[end] != delim && line[end]) {
end++;
}
v.push_back(line.substr(begin, end-begin));
end++;
}
vector<int> v2(v.size());
transform(v.begin(), v.end(), v2.begin(), func);
return v2;
}


39 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 22:42:34 ]
std::map<wstring, HPEN> pens;
std::for_each(pens.begin(), pens.end(), ここ);
と書くと、「ここ」の関数に
std::pair<wstring, HPEN>
が渡されると思うのですが、
BOOL DeleteObject(HGDIOBJ)なので
都合よくHPENだけ渡す方法はないでしょうか?


40 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 22:56:11 ]
Microsoft OutLook 2003のメールのルール仕分けにあるような
テキストボックスにリンクを複数貼ってクリックするとフォームが開き
その開くフォームがフォルダダイアログだったりアドレス入力フォームだったりと
一行ずつ異なるリンク付きテキストボックスはどのようにつくればいいのでしょうか?

RichTextBoxで作ろうにもリンクしている文字列が開いたフォームで変えられるので
LinkClickedのリンク文字列で判断は難しく、同名のリンクが複数あった場合などで困っております。

どなたか良い方法を教えてください。




41 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 22:59:43 ]
>>39
ファンクタ

42 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:03:48 ]
>>31>>38
unary_function型そのものには関数呼び出しが定義されてないからエラー
そもそもunary_function型はそのように使うことを想定されていない


template <typename T> vector<int> line2vec2(string line, char delim, const T& func)
{
色々な処理
tansform(v.begin(),v.end(),v2.begin(),func());
tansform(v.begin(),v.end(),v2.begin(),func);
=>両方ともコンパイルは通らなかったです。
return v2;
}

43 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:06:14 ]
間違えたw
コメント残しっぱだし……

template <typename T> vector<int> line2vec2(string line, char delim)
{
色々な処理
tansform(v.begin(),v.end(),v2.begin(),T());
return v2;
}

44 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:47:03 ]
そこでU+2028の改行ですよ。

45 名前:デフォルトの名無しさん [2008/01/17(木) 01:03:03 ]
"数値を文字列として入力して、一桁ずつを配列にいれて計算する"

場合ですが、引き算・掛け算の計算方法を誰か言葉で説明してください!

例えば足し算なら
「下の桁から一桁ずつ足していって10を超えたら次の配列に桁上げしていれる」
となるんですが。。
おねがいします!

46 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 01:08:08 ]
>>45
aとbの掛け算なら、aをb回足し算すればいいと思うよ

47 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 01:19:59 ]
筆算の要領で計算すりゃいいんじゃないの

48 名前:デフォルトの名無しさん [2008/01/17(木) 01:30:24 ]
>>46
50桁の掛け算なんですがそれで大丈夫ですかね?(+_+)
やってみます!
あざす!

>>47
筆算みたいに計算するって書いたら先生にそんな単純に書くなって言われました↓
でもあざす!

49 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:35:35 ]
C/C++ では標準的にインデントとしていくつのスペースを
入れるのがよいのでしょうか?2 となっているコードもあるし
4となっているコードもあります.

50 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:36:21 ]
4でも6でも8でも構いません。
3や5でもいいですよ。



51 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 11:44:49 ]
標準なんてないだろう。俺は4だけど。

52 名前:デフォルトの名無しさん [2008/01/17(木) 11:49:01 ]
>>42-43
ありがとうございます。
そうすると、unary_function()を引数にもらって、それを内部で使う関数というのは
かけないのですか?
void *のポインタをもらって、内部で適当にキャストして、unary_function()として
使えたりしないのかな。
とりあえずやってみます。


53 名前:デフォルトの名無しさん [2008/01/17(木) 12:13:01 ]
a=1/350,1/320,1/360,1/368,1/397,1/400
b=1/7.90,1/8.12,1/8.23,1/8.56,1/7.97,1/8.68
と仮定する。
for ($i=0; $i<=5; $i++) {
$p1 = (1/$a[$i])**$a * (1-1/$a[$i])**($play-$a);
$p2 = (1/$b[$i])**$b * (1-1/$b[$i])**($play-$b);
$p3 = $p1 * $p2;

$t_ap += $p1; push(@ap,$p1);
$t_bp += $p2; push(@bp,$p2);
$t_abp += $p3; push(@abp, $p3);
}

上記の構文で計算すると分母に差があるのでオーバーフローを起こす・・・と言われました。
**($play-$a);←この部分の計算に問題があるようなのですが、プログラムに疎いので良く判りません><
問題のある部分をどのように記述するべきなのかご指導お願い致します。m(_ _)m



54 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:18:48 ]
ここは、C/C++のスレなんだが

55 名前:デフォルトの名無しさん [2008/01/17(木) 12:20:36 ]
>>54
すいませんm(_ _)m
どこで聞けば良いのでしょう?

56 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:21:39 ]
自分の使ってる言語のスレを探せばいいだろうが
pc11.2ch.net/tech/subback.html

57 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:22:31 ]
>>52
unary_functionへの参照をもらえばいいんじゃないかね

58 名前:デフォルトの名無しさん [2008/01/17(木) 12:24:01 ]
>>56
それすら判りません><

59 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:26:19 ]
>>58
Perlについての質問箱 34箱目
pc11.2ch.net/test/read.cgi/tech/1199977642/

60 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:26:46 ]
コマンド名か、コンパイル時の画面に書いてないか。



61 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:29:49 ]
unary_functionの関数呼び出し演算子って
仮想関数になってんの?

62 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:53:20 ]
unary_functionはテンプレート引数をargument_typeとresult_typeにtypedefしてるだけにすぎん

63 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:54:49 ]
だよねやっぱ
じゃあunary_function型で引数を取ること自体が意味無い、だよね

64 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:02:36 ]
以下のソースプログラムをコンパイルして実行したのですが

M:\>sort3.exe
入力ファイル名: 
と表示されて、そこからどうすればいいかわかりません。

ファイル入出力とソートの宿題なのですが、
いかんせん超がつくほどの初心者なので…。

どなたかよろしかったらお願いします。
使っているソフトはVisual C++ 2005 Express Edition です。





65 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:03:04 ]
上のソースプログラムです。
/* sort3.c */
#include <stdio.h>
struct kamoku { char mei[20];
char kana[10];
int ei;
int koku;
int su;
int sha;
int ri;
}
#define SIZE 30
main(){
struct kamoku seiseki[SIZE], min;
int i,j,m,n;
FILE *input, *output;
char infname[16], outfname[16];

printf("入力ファイル名: ");
scanf("%s",infname);
printf("出力ファイル名: ");
scanf("%s",outfname);

if((input=fopen(infname,"r")) == NULL ){
printf("ファイルがありません\n");
exit(1);
}
if((output=fopen(infname,"r")) == NULL ){
printf("ファイルが作成できません\n");
exit(1);
}


66 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:06:19 ]
>>64
入力ファイル名を入力する。

・・・ってかプログラム以前にパソコン教室に通うべきだな。

67 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:12:05 ]
>>66
どのようなファイルを入力すべきかがわかりません。
初心者ですみません。

68 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:15:42 ]
>>67
鼬害。キーボードの使い方やファイルとは何かと言ったことは
プログラミング以前の知識です。

69 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:18:13 ]
>>67
ちゃんと授業にはでようね

70 名前:デフォルトの名無しさん [2008/01/17(木) 13:24:44 ]
>>57
やってみましたが、ダメなようです。

vector<int> line2vec2(string line, char delim, const unary_function<string,int> &func) {
int begin, end;
vector<string> v;
begin = end = 0;
while (line[end]) {
begin = end;
while (line[end] != delim && line[end]) {
end++;
}
v.push_back(line.substr(begin, end-begin));
end++;
}
vector<int> v2(v.size());
transform(v.begin(), v.end(), v2.begin(), func());
return v2;
}

>>61
仮想関数になっているかどうかはよくわかりませんでしたが、
stlのソースを見ていると、pointer_to_unary_functionというクラスが
ありました。今度はこれで試してみる。




71 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:40:25 ]
なんか無駄に複雑な事になってるな

72 名前:デフォルトの名無しさん [2008/01/17(木) 13:41:27 ]
>>70のつづき
もうなんだかわけがわからなくなってきた。
unary_functionはArgとResのtypedefなんですか?
STLのコンパイルエラーメッセージはやくにたたん。

73 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:53:51 ]
普通std::unary_functionは継承して使わないと役に立たないと思うんだが。

74 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:14:06 ]
>>72
そもそもunary_functionを引数にしようとした理由は?
普通継承したファンクタ作るよね

75 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:17:44 ]
std::unary_functionやstd::binary_functionを継承する理由は
std::bind2ndなどのアダプタがargument_typeとresult_typeを
必要とするから。

それ以上の意味はない。別にstd::unary_functionを継承しなくても
自分でargument_typeとresult_typeをtypedefしてもいい。

76 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:33:29 ]
こんな感じか?
template <typename T>
vector<int> line2vec2(string line, char delim, T func) {
transform(v.begin(), v.end(), v2.begin(), func());
}

line2vec2( , , std::ptr_fun(関数ポインタ));
line2vec2( , , 関数オブジェクト());

77 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:35:18 ]
間違えた
>transform(v.begin(), v.end(), v2.begin(), func());
transform(v.begin(), v.end(), v2.begin(), func);こうだな

78 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:04:35 ]
>>76-77
>>42-43

79 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:06:07 ]
>>72
今回のエラーメッセージは割と理解できるものだし、
そもそも何が駄目なのか指摘されてるのに
まるで見当違いの方法を試しているのはお前自身だ

80 名前:76 mailto:sage [2008/01/17(木) 15:10:05 ]
>>78
>>43はstd::ptr_funが使えない。



81 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:45:44 ]
>>80
おう、こりゃ失礼

82 名前:コンパイルできた [2008/01/17(木) 15:48:16 ]
皆さんのおかげ様で、とうとうできました。
ソースは以下です。

template <class T, typename T2>
vector<T> line2vec2(string line, char delim, T2 func) {
int begin, end;
vector<string> v;
begin = end = 0;
while (line[end]) {
begin = end;
while (line[end] != delim && line[end]) {
end++;
}
v.push_back(line.substr(begin, end-begin));
end++;
}
vector<T> v2(v.size());
transform(v.begin(), v.end(), v2.begin(), func);
return v2;
}
この関数をこんな感じで使う。
string s = "1 2 3 4 5 - 6 7 8 9";
vector<int> v = line2vec2<int>(s, ' ', string2int());


83 名前:コンパイルできた [2008/01/17(木) 15:48:54 ]
<82の続きです>
ちなみにstring2int()は以下のように定義しました。
class string2int : public unary_function<string,int> {
public:
unary_function<string,int>::result_type operator() (unary_function<string,int>::argument_type str) {
if (str == "-")return 0;
else return static_cast<int>(atoi(str.c_str()));
}
};

いやー、すげえ感謝感謝。今回答えてくれた方々には昼飯一回おごってもいいくらいス。


84 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:57:07 ]
昼飯一回程度の感謝

85 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:04:00 ]
>>83
もうちょっと本買って読んだ方がいいな

86 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:04:23 ]
名無しの書き込みから個人を特定して昼飯をおごる程の感謝
えらく大変だな


87 名前:76 mailto:sage [2008/01/17(木) 17:44:29 ]
>>83
昼飯はいいから俺がニート脱出できるように神様にお願いしといてください。

88 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:00:30 ]
#include <iostream>
#include <cstdio>

char ch[10];

int main()
{
while ((cin.getlie(char, 10)) != EOF) {

}
}


これをコンパイルしようとするとwhileの行でエラーが出るのですが、
何がいけないのでしょうか??

89 名前:88 mailto:sage [2008/01/17(木) 20:02:08 ]
すいませんwhileの行のcharはchの間違いです。

90 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:03:38 ]
>>88
余分なものが付いているk 「ar」 a



91 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:32 ]
getlie

92 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:36 ]
getlie ではなくて getline な。
分かってるとは思うけど

93 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:38 ]
>>88
std:: n が足りない

94 名前:88 mailto:sage [2008/01/17(木) 20:12:05 ]
回答くださった方ありがとうございます。
すいません色々抜けていました。。orz
正しくはこれです。

#include <iostream>
#include <cstdio>
using namespace std;

char ch[10];

int main()
{
while ((cin.getline(ch, 8)) != EOF) {

cout << "test";
}
}


これでもコンパイルできないのです。
whileの行でエラー出ます。



95 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:14:35 ]
>>94
!= EOFこれが不要。
質問するときはエラーの内容も書いてくれ。

96 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:14:54 ]
>>94

#include <iostream>

char ch[10];

int main()
{
 while (std::cin.getline(ch, 8)) {
  std::cout << "test";
 }
}

97 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:35:00 ]
#include <iostream>

int main()
{
  char ch[10];
  while (std::cin.getline(ch, sizeof ch)) {
    std::cout << "test";
  }
}


98 名前:デフォルトの名無しさん [2008/01/17(木) 21:21:43 ]
Fedora6 gcc
でファイルの更新を検知するプログラムを作りたいのですが、
更新までブロックする関数を教えてください。

if (ファイルの更新までブロック)
{
//更新された
read();
...
}
みたいなカンジです。

ちなみにtailのソースを見てみたのですが、
1秒毎にファイルが更新されたかチェックして処理をしているようです。

何秒毎にチェックするのではなく、更新までブロックできる関数がわかればいいです。

よろしくお願いします。

99 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:29:34 ]
なんでそんなものが存在するという前提で物事を進めようとするの?

100 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:38:03 ]
てゆーかチェックせずに、更新されると発見してほしいのかよwwwwwwwww



101 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:42:18 ]
Windows だとディレクトリの更新を検知してシグナル送ってくれる
FindFirstChangeNotification/FindNextChangeNotification って API があるから
他の OS でもそういう API があるんじゃないかと思う気持ちも分からんでも無い。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<252KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef